'개인프로젝트'에 해당되는 글 11건

  1. 2024.12.23 저렴한 비용으로 웹서비스 구축하는 방법
  2. 2019.10.22 sever.xml 설정 문제
  3. 2019.10.14 도메인(URL) 구입 및 내 사이트에 연결 (작성중)
  4. 2019.10.14 호스팅 서버 등록
  5. 2019.09.09 웹 개발자 포트폴리오를 위한 10가지 팁
  6. 2019.07.19 각 테이블 연동해서 기능 구현 (2)
  7. 2019.07.18 각 테이블 연동해서 기능 구현 (1)
  8. 2019.07.18 기능별 쿼리작성, 시퀀스 작성, 외래키 제약조건 추가

저렴한 비용으로 웹서비스 구축하는 방법

개인프로젝트 2024. 12. 23. 09:51

웹서비스를 최소한의 비용으로 구축하려면 비용 절감을 위한 효율적인 선택과 오픈소스 도구 활용이 중요합니다.

각 항목별로 저렴하게 설정하는 방법입니다.

1. 도메인

  • 무료 도메인:
    • Freenom에서 무료 도메인(예: .tk, .ml, .ga)을 사용.
  • 저렴한 유료 도메인:
    • 도메인 등록 업체(예: Namecheap, Google Domains)에서 프로모션을 통해 .com 도메인을 $5~$10/년 정도로 구매 가능.

2. 서버

  • 무료/저비용 클라우드 서비스:
    • AWS Free Tier: 1년 동안 t2.micro(1 vCPU, 1GB RAM) 무료 제공.
    • Google Cloud Free Tier: f1-micro 인스턴스(매월 30GB HDD 포함) 무료.
    • Azure Free Account: 12개월 동안 특정 리소스 무료.
    • Oracle Cloud Free Tier: 항상 무료인 Arm 기반 VM 2개 제공.
  • 저비용 VPS:
    • DigitalOcean, Linode, Vultr 등에서 $5/월부터 시작하는 저렴한 VPS 제공.
  • 자체 서버 호스팅:
    • Raspberry Pi 등 저전력 장치를 사용하여 집에서 서버를 운영. (단, 인터넷 업타임과 보안 관리 필요)

3. 데이터베이스(DB)

  • 오픈소스 데이터베이스:
    • MySQL/MariaDB, PostgreSQL 등 무료로 사용 가능.
  • 클라우드 관리형 DB:
    • Google Cloud, AWS에서 제공하는 무료 DB 서비스.
  • 로컬 설치:
    • 서버에 직접 MySQL/MariaDB를 설치하여 운영.
  • SQLite:
    • 소규모 웹서비스에서는 간단히 SQLite로 시작 가능(파일 기반).

4. 웹 서버

  • 무료 웹서버 소프트웨어:
    • Nginx: 경량화된 고성능 웹 서버.
    • Apache: 안정적이고 널리 사용되는 웹 서버.
  • HTTPS 인증서:

5. 애플리케이션 개발 환경

  • 언어 및 프레임워크:
    • Python: Flask, Django.
    • JavaScript: Node.js, Express.
    • PHP: Laravel, CodeIgniter.
  • 무료 개발 도구:
    • Visual Studio Code, GitHub.

6. 배포 및 버전 관리

  • 무료 Git 리포지토리:
    • GitHub, GitLab, Bitbucket.
  • CI/CD 도구:
    • GitHub Actions, GitLab CI/CD 등 무료로 제공.

7. 운영비 절감 팁

  1. 자동화:
    • Ansible, Docker 등으로 서버 설정 자동화.
  2. 스케일 아웃 전략:
    • 초기에는 최소 리소스 사용, 트래픽 증가 시 추가 리소스 할당.
  3. 정적 웹사이트로 시작:
    • 간단한 웹사이트는 Netlify, Vercel 같은 무료 정적 사이트 호스팅 플랫폼 활용.
  4. 모니터링 도구:
    • 무료로 제공되는 Grafana, Prometheus, UptimeRobot 사용.

예상 초기 비용 예시

항목 비용(월)

도메인 $1~$10/년
서버 무료(AWS 등) 또는 $5~$10
데이터베이스 무료(MySQL)
HTTPS 인증서 무료(Let's Encrypt)
총계 $5~$15

 

위 방법들을 활용하면 초기 비용을 $5~$15 수준으로 유지하면서도 안정적인 웹 서비스를 구축할 수 있습니다.

추가적으로 클라우드 프로모션을 적극 활용해 비용을 절감할 수 있습니다.

:

sever.xml 설정 문제

개인프로젝트 2019. 10. 22. 14:05

Spring 프로젝트 중 일부





프로젝트 내부 server.xml 중 일부


1
      
<Context docBase="hansub_project" path="/hansub_project" reloadable="true" source="org.eclipse.jst.jee.server:hansub_project"/></Host>
 
cs




리눅스 프로젝트 내부 server.xml 중 일부


1
<Context path="" docBase="hansub_project" reloadable="true" />
cs







:

도메인(URL) 구입 및 내 사이트에 연결 (작성중)

개인프로젝트 2019. 10. 14. 13:53

URL이란??


우리가 접속하고자 하는 사이트를 쉽게 찾아갈 수 있도록 만든 언어로된 주소. 도메인이라고도 부른다.




일단 카페 24에서 도메인 구매







출처

https://www.youtube.com/watch?v=Bb7OZobUqwc

:

호스팅 서버 등록

개인프로젝트 2019. 10. 14. 12:14

https://aws.amazon.com/ko/  (아마존 웹 서비스)


국내 호스팅 서버 서비스 업체들에서는 db중 오라클을 서비스 하지 않기 때문...


오라클은 상용서버라 가격이 비싸기 때문에, 오라클을 사용하려면 아마존을 사용해야함


:

웹 개발자 포트폴리오를 위한 10가지 팁

개인프로젝트 2019. 9. 9. 14:00

1. 홈페이지의 디자인에 신경을 많이 써라.


ㄴ홈페이지에서 가장 먼저 보여지는 부분이기 때문에 신경써야되고, 백엔드 개발자라면 템플릿을 잘 활용하는것도

하나의 방법이 될 수 있다.




2. 도메인 사용


ㄴ무료 서브도메인을 사용하지 말고, 커스텀 도메일을 구매해서 연결한다.


ㄴ기본적인 것들이기 때문에 이런것들을 하지 않으면 평가자에게 사소한것을 신경쓰지 않는다는 느낌을 줄 수 있다.




3. Simple하게 해라


ㄴ가장 중요한 몇 개의 프로젝트만 넣고 불필요한 것은 모두 빼고 최소화해라.


ㄴ가능한한 글도 최대한 짧게 써라.


ㄴ프로젝트는 항상 가장 중요한 것들을 맨 위에 써라. 너무 길면 읽지 않기 때문에




4.  과장하지 마라.


ㄴ사용해본 모든 언어와 모든 프레임워크를 나열하지 말고, 모든 분야를 조금씩 아는 것보다 몇가지에 전문적인 것이 훨씬 좋다.




5.  프로젝트 선택


ㄴ자신이 만든 프로젝트를 전부다 넣지 말고, 가장 큰 프로젝트만 선택해서 넣도록 한다.




6. Customize Course Projects


ㄴ강의나 튜토리얼을 따라해서 프로젝트를 만들었다면 절대 그대로 넣지 말고 커스터마이징해서 넣도록 한다.




7. Easy Contact


ㄴ인사담당자가 당신에게 연락하기 쉽게 하라.


ㄴ이메일, 핸드폰 번호 같은 연락처를 홈페이지의 상단이나 하단에 잘 보이게 넣어놓는다.




8. Web Presence & Brand


ㄴ자신이 한 것들을 보여줄 수단을 넣어라. (깃허브 주소, 블로그 주소, 트레일로 주소 등등)













출처

https://velog.io/@chris/10-web-developer-portfolio-tips

:

각 테이블 연동해서 기능 구현 (2)

개인프로젝트 2019. 7. 19. 11:48

실행해봐야되는 sql문



검색 기능 (글쓴이, 제목)

1
2
3
4
5
6
--게시판에서 게시글에 글쓴이의 id에 fh가 포함되는 id의 게시글을 검색
select * from MEMBER_BOARD WHERE USER_ID LIKE '%fh%';
 
 
--게시판에서 게시글 이름에 34가 들어가는 게시글을 검색 
select * from MEMBER_BOARD WHERE title LIKE '%34%';
cs



관리자 아이디생성해서 공지사항을 작성하고, 관리자아이디가 삭제되면 공지사항도 같이 삭제되고, 공지사항에 있는 댓글도 같이 삭제

1
2
3
4
5
6
7
8
9
10
insert into ADMIN (admin_id, admin_pass, e_mail) values ('dlgzfsq_admin'172235'dlgk1@naver.com'); --관리자 아이디 생성
 
insert into ADMIN_BOARD (bno, admin_id, viewcnt, title, rcnt, content) 
values (admin_bno.nextval, 'dlgkstjq11_admin'0'1번째공지글'0'1번째공지글의내용');
 
select * from ADMIN;
 
select * from ADMIN_BOARD;
 
DELETE FROM ADMIN WHERE ADMIN_ID='dlgkstjq_admin';
cs




공지게시판에 공지글에 회원이 댓글을 작성하고, 댓글을 작성한 회원이 회원탈퇴를 하면 댓글까지 같이 삭제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--공지게시판에 공지글에 회원이 댓글을 작성하고, 댓글을 작성한 회원이 회원탈퇴를 하면 댓글까지 같이 삭제
 
insert into ADMIN_BOARD (bno, admin_id, viewcnt, title, rcnt, content) 
values (admin_bno.nextval, 'dlgkstjq11_admin'0'1번째공지글'0'1번째공지글의내용'); --공지글 작성
 
select * from admin_board;
 
select * from member;
 
insert into ADMIN_BOARD_REPLY (rno, user_id, bno, r_content, join_date, recommend) --reg_date는 현재 시간이므로 따로 안넣어도 됨
values (admin_reply_bno.nextval, 'fhraos12'5'댓글작성하기', (select join_date from member where user_id='fhraos12'), 3);
 
select * from admin_board_reply;
 
delete from member where user_id='fhraos12';
cs



회원게시판 (일반게시물) 에서 추천수가 10인 게시글을 회원게시판 (베스트게시물)로 삽입하기

(테이블이 연동되어있어서 회원탈퇴하면 자동적으로 글이 삭제됨)

1
2
3
4
5
6
7
8
9
insert into member_best_board (best_bno, member_bno, user_id, viewcnt, title, rcnt, content, recommend) values 
(best_bno.nextval,
(select member_bno from member_board where recommend=10),
(select user_id from member_board where recommend=10),
0 --default값을 0으로 변경할 예정,
(select title from member_board where recommend=10),
(select rcnt from member_board where recommend=10),
(select content from member_board where recommend=10),
0 --default값을 0으로 변경할 예정);
cs



각 게시판별 추천수, 조회수 초기 기본값을 0으로 다시 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
alter table MEMBER_REPLY modify(recommend default 0);
 
alter table MEMBER_BOARD modify(viewcnt default 0);
 
alter table MEMBER_BOARD modify(rcnt default 0);
 
alter table MEMBER_BOARD modify(recommend default 0);
 
alter table MEMBER_BEST_BOARD modify(viewcnt default 0);
 
alter table MEMBER_BEST_BOARD modify(rcnt default 0);
 
alter table MEMBER_BEST_BOARD modify(recommend default 0);
 
alter table ADMIN_BOARD_REPLY modify(recommend default 0);
 
alter table ADMIN_BOARD modify(viewcnt default 0);
 
alter table ADMIN_BOARD modify(rcnt default 0);
cs



게시글 한번 클릭시 조회수 1씩 증가, 게시글 댓글 작성시 댓글 개수가 1씩 증가

1
2
3
4
5
6
7
8
9
10
11
 
--게시글을 한번 클릭시 조회수 1증가
 
update MEMBER_BEST_BOARD set viewcnt=viewcnt+1
where best_bno=10;
 
 
--게시글의 댓글을 작성시 댓글 개수가 1씩 증가
 
update MEMBER_BEST_BOARD set recommend=recommend+1
where best_bno=10;
cs



댓글 작성시 댓글 개수가 1씩 증가.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--댓글수 체크--
update MEMBER_BEST_BOARD set rcnt=(select count(*from member_reply where member_bno=31)
where best_bno=10;
 

 
--댓글 삽입--
insert into member_reply (rno, user_id, member_bno, r_content, join_date)
values (member_reply_bno.nextval, 'fhraos1225', (select member_bno from member_board where member_bno=31), '댓글작성',
(select join_date from member where user_id='fhraos1225'));
 
cs


:

각 테이블 연동해서 기능 구현 (1)

개인프로젝트 2019. 7. 18. 17:05

실행해봐야되는 sql문



회원가입 (O)

1
insert into MEMBER(user_id, member_pass, e_mail) values ('dlgkstjq12','1234','dlgkstjq623@naver.com'); --회원가입 쿼리
cs



아이디 찾기 (O)

1
select user_id from MEMBER WHERE E_MAIL='dlgkstjq623@naver.com';          --이메일을 사용해서 아이디 찾기
cs



비밀번호 찾기 (O)

1
select member_pass from MEMBER WHERE E_MAIL='dlgkstjq623@naver.com' AND USER_ID='dlgkstjq12';       --이메일과 아이디를 사용해서 비밀번호 찾기
cs

 



게시글 작성 (O)

1
2
3
4
--회원게시판(일반게시글) 테이블에 자료를 넣어보기---
insert into MEMBER_BOARD(member_bno, user_id, viewcnt, title, rcnt, content, recommend) 
values (member_bno.nextval, 'fhraos125', member_board_viewcnt.nextval, '게시글제목2',
456,'게시글을 쓰기',member_board_recommend.nextval);
cs




회원이 탈퇴하면 그 회원이 작성한 게시글 삭제 (O)

1
2
3
4
5
6
7
8
9
--게시글 작성---
insert into MEMBER_BOARD(member_bno, user_id, viewcnt, title, rcnt, content, recommend) 
values (member_bno.nextval, 'fhraos125', member_board_viewcnt.nextval, '게시글제목2',
456,'게시글을 쓰기',member_board_recommend.nextval);
 
--회원 탈퇴--
delete from MEMBER WHERE user_id='fhraos125';
 
--해당 회원이 올린 게시글이 전부다 삭제--
cs




게시글이 삭제되면 그 게시글에 작성된 댓글까지 함께 삭제 (O)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--게시글 작성---
insert into MEMBER_BOARD(member_bno, user_id, viewcnt, title, rcnt, content, recommend) 
values (member_bno.nextval, 'fhraos125', member_board_viewcnt.nextval, '게시글제목2',
456,'게시글을 쓰기',member_board_recommend.nextval);
 
 
--댓글 작성--
insert into MEMBER_REPLY (rno, user_id, member_bno, r_content, recommend)
values (member_reply_bno.nextval, 'fhraos125', (select member_bno from member_board where member_bno=17), '글내용1232', member_reply_recommend.nextval);
 
 
--게시글 삭제
delete from MEMBER_BOARD WHERE MEMBER_BNO=17;
 
 
--해당 게시글에 댓글도 같이 삭제--
cs




회원이 탈퇴하면 그 회원이 작성한 게시글과 댓글 삭제 (O)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--게시글 작성---
insert into MEMBER_BOARD(member_bno, user_id, viewcnt, title, rcnt, content, recommend) 
values (member_bno.nextval, 'fhraos125', member_board_viewcnt.nextval, '게시글제목2',
456,'게시글을 쓰기',member_board_recommend.nextval);
 
 
--댓글 작성--
insert into MEMBER_REPLY (rno, user_id, member_bno, r_content, recommend)
values (member_reply_bno.nextval, 'fhraos125', (select member_bno from member_board where member_bno=17), '글내용1232', member_reply_recommend.nextval);
 
 
--회원 탈퇴--
delete from MEMBER WHERE user_id='fhraos125';
 
 
--회원이 탈퇴하면 해당 회원이 작성한 게시글과 댓글을 --
cs



검색 기능 (제목, 작성자 (글쓴이))


1
2
3
4
5
6
--게시판에서 게시글에 글쓴이의 id에 fh가 포함되는 id의 게시글을 검색
select * from MEMBER_BOARD WHERE USER_ID LIKE '%fh%';
 
 
--게시판에서 게시글 이름에 34가 들어가는 게시글을 검색 
select * from MEMBER_BOARD WHERE title LIKE '%34%';
cs


:

기능별 쿼리작성, 시퀀스 작성, 외래키 제약조건 추가

개인프로젝트 2019. 7. 18. 14:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
-----------------------------------작성중인 쿼리---------------------------------------------
 

 
 
--먼저 각 게시글과 댓글 번호를 1씩 증가시키기 위해서 고유 시퀀스들을 생성함
CREATE SEQUENCE member_bno  --회원게시판(일반게시물)
START WITH 1
INCREMENT BY 1
MAXVALUE 10000;
 
CREATE SEQUENCE best_bno    --회원게시판(베스트게시물)
START WITH 1
INCREMENT BY 1
MAXVALUE 10000;
 
CREATE SEQUENCE admin_bno   --공지게시판
START WITH 1
INCREMENT BY 1
MAXVALUE 10000;
 
CREATE SEQUENCE member_reply_bno    --회원게시판 댓글
START WITH 1
INCREMENT BY 1
MAXVALUE 10000;
 
CREATE SEQUENCE admin_reply_bno --공지게시판 댓글
START WITH 1
INCREMENT BY 1
MAXVALUE 10000;
 
 
 
--게시판마다 조회수 시퀀스 작성--
CREATE SEQUENCE admin_viewcnt -- 공지게시판 조회수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
CREATE SEQUENCE member_board_viewcnt -- 회원게시판(일반게시물) 조회수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
CREATE SEQUENCE member_best_board_viewcnt -- 회원게시판(베스트게시물) 조회수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
 
--게시판마다 추천수 시퀀스 작성--
CREATE SEQUENCE member_board_recommend -- 회원게시판 (일반게시물) 추천수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
 
CREATE SEQUENCE member_best_board_recommend -- 회원게시판(베스트게시물) 추천수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
CREATE SEQUENCE member_reply_recommend -- 회원게시판 댓글 추천수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
CREATE SEQUENCE admin_board_recommend -- 공지게시판 추천수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
 
CREATE SEQUENCE admin_board_reply_recommend -- 공지게시판 댓글 추천수
START WITH 1
INCREMENT BY 1
MAXVALUE 20000;
 
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
--회원게시판(일반게시글) 테이블에 자료를 넣어보기---
insert into MEMBER_BOARD(member_bno, user_id, viewcnt, title, rcnt, content, recommend) 
values (member_bno.nextval, 'dlgkstjq12', member_board_viewcnt.nextval, '게시글쓰기',
1,'처음 쓰는 게시글',member_board_recommend.nextval);
 
 
select * from MEMBER_BOARD;
 
delete from MEMBER WHERE E_MAIL='dlgkstjq623@naver.com';
 
select * from MEMBER;
 
 
 
------------외래키에 제약조건을 추가 참조테이블의 값이 삭제되면 연쇄삭제되도록 수정하기 위해 일단 외래키를 전부 삭제하고 제약조건을 추가해서 다시 생성----
 
 
 
 
ALTER TABLE MEMBER_REPLY DROP CONSTRAINT user_id;
 
ALTER TABLE MEMBER_REPLY
ADD CONSTRAINT user_id FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id)ON DELETE CASCADE;
 
 
ALTER TABLE MEMBER_REPLY DROP CONSTRAINT member_bno;
 
ALTER TABLE MEMBER_REPLY
ADD CONSTRAINT member_bno FOREIGN KEY (member_bno)
REFERENCES MEMBER_BOARD(member_bno)ON DELETE CASCADE;
 
 
ALTER TABLE MEMBER_BOARD DROP CONSTRAINT user_id2;
 
--회원게시판(일반게시물) 테이블의 ID를 외래키로 설정
ALTER TABLE MEMBER_BOARD
ADD CONSTRAINT user_id2 FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id)ON DELETE CASCADE;
 
 
ALTER TABLE MEMBER_BEST_BOARD DROP CONSTRAINT user_id3;
 
--회원게시판(베스트게시물) 테이블의 ID를 외래키로 설정해서 MEMBER 테이블을 참조하도록 설정
ALTER TABLE MEMBER_BEST_BOARD
ADD CONSTRAINT user_id3 FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id)ON DELETE CASCADE;
 
 
 
ALTER TABLE MEMBER_BEST_BOARD DROP CONSTRAINT member_bno2;
 
--회원게시판(베스트게시물) 테이블의 member_bno를 외래키로 설정해서 MEMBER_BOARD 테이블을 참조하도록 설정
ALTER TABLE MEMBER_BEST_BOARD
ADD CONSTRAINT member_bno2 FOREIGN KEY (member_bno)
REFERENCES MEMBER_BOARD(member_bno)ON DELETE CASCADE;
 
 
ALTER TABLE ADMIN_BOARD DROP CONSTRAINT admin_id;
 
--관리자 테이블, 공지게시판 테이블, 공지게시판 댓글 테이블의 FK 제약조건을 설정
ALTER TABLE ADMIN_BOARD
ADD CONSTRAINT admin_id FOREIGN KEY (admin_id)
REFERENCES ADMIN(admin_id)ON DELETE CASCADE;
 
 
 
ALTER TABLE ADMIN_BOARD_REPLY DROP CONSTRAINT bno;
 
 
ALTER TABLE ADMIN_BOARD_REPLY
ADD CONSTRAINT bno FOREIGN KEY (bno)
REFERENCES ADMIN_BOARD(bno)ON DELETE CASCADE;
 
 
--댓글 게시판 BNO의 타입을 변경 (참조할 컬럼의 데이터타입과 일치하도록..)
ALTER TABLE ADMIN_BOARD_REPLY modify(bno number(10));
 
 
 
ALTER TABLE ADMIN_BOARD_REPLY DROP CONSTRAINT user_id4;
 
--공지게시판의 댓글 테이블에 ID를 회원 테이블의 ID를 참조하도록 외래키로 설정
ALTER TABLE ADMIN_BOARD_REPLY
ADD CONSTRAINT user_id4 FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id)ON DELETE CASCADE;
 
cs


: