장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
-
[Servlet] 웹 애플리케이션 기본 구조와 Servlet 라이프사이클0707분웹 애플리케이션 개발을 위한 웹 기본 동작 원리를 익혀본다. 1. 네트워크: HTTP웹은 HTTP라는 프로토콜을 기반으로 브라우저와 서버가 메시지를 주고 받으면서 동작한다. 브라우저가 HTML을 통해 서버에 요청(request)을 전달하면 서버는 request와 함께 전달된 사용자 정보를 추출해서 요청된 기능을 처리한다. 이때 서버에서 사용자 request를 처리하는 대표적인 자바 기술이 Servlet이다.서블릿은 Spring MVC에서도 이어지는 개념이니 용어가 익숙해져야 한다.웹 앱 개발은 TCP 기반의 HTTP를 이해하는 것으로 시작한다. 네트워크 사용할 때 사용하는 통신 규약이므로 웹 프로그래밍 개발을 위해 동작 원리를 익혀야 한다. 히히 끼워팔기 TCP/IP 와 UDP*이것이 자바다(3판)을 ..
-
스프링 프레임워크 기본기0609분Spring frameworkWeb 프로젝트에 주로 사용되는 OOP 구조를 뒷받침하고 전체 구조를 설계하는 뼈대 코드다. POJO(Plain Old Java Object) 기반의 구성객체 간 관계를 구성할 때 별도의 API 등을 사용하지 않아 특정 라이브러리나 컨테이너 기술에 종속적이지 않다.의존성 주입(Dependency Injection)하나의 객체 실행에 다른 객체가 필요한 상황을 의존성이라 한다. 의존성 주입은 어떤 객체가 필요한 객체를 외부에서 주입해준다는 것이다. 음식점의 예에서 직접 식재료를 사지 않고, 대행업체에서 배송해주는 것을 말하며 주입 받는 입장에서 어떤 객체인지 신경 쓸 필요 없이 편리한 점이 장점이다. 이때 대행업체의 역할이 ApplicationContext다. Applicati..
-
JDBC 프로그래밍0605분JDBC는 자바랑 디비를 연결해 데이터 입출력을 돕는 라이브러리 표준 API(인터페이스 모음),자바와 DBMS 데이터 입출력을 위해 자바 진영에서 정의한 규격(java.sql에서 제공하는 API)표준 문법 예시String sql = "insert into users(id, password, name, role) values(?, ?, ?, ?)";드라이버 교체만으로 DBMS를 변경할 수 있기 때문에 특정 DBMS에 종속되지 않는 데이터베이스 연동 프로그램이 가능해진다.JDBC Driver는 DB에서 실제 동작하는 클래스니까 각각의 DB에서 제공함JDBC 인터페이스를 DBMS 벤더가 구현한 라이브러리 (클래스 모음) JDBC 개발 핵심 단계 드라이버 확인Class.forName(”com.mysql.cj.j..
-
[Node.js] 비밀번호 암호화하기 - bcypt 모듈0530분비밀번호가 req.body에 담겨서 이동할 때 암호화없이 그대로 이동하면 js 코드로 값을 홀랑 알아내버릴 수 있다.해시함수를 이용해 암호화해보자. 한 번 해시된 값은 원래 입력값으로 되돌릴 수 없다. const bcrypt = require("bcrypt");const password = "qwer";bycrypt.hash(password, 10, (err,hash) => { try { // 해시화된 비밀번호를 디비에서 저장하거나 다른 처리 } catch(err) { } });비밀번호를 10번 해시한 후에 hash 함수를 실행할 것이다. 비밀번호가 디비에 저장되면 로그인할 때마다의 비밀번호가 해시된 비번값과 동일한지 확인해야 로그인 처리를 해줄 수 있다. const l..
-
[Node][Express.js] HTTP transaction 미들웨어0515분*Node.js 프로그래밍 입문(고경희)를 읽고 작성한 글입니다. Express.js(노드 기반 백엔드 프레임워크)를 이용했습니다.Response Request따로 status를 설정하지 않으면 200을 기본값으로 사용한다. POST는 자료가 새로 만들어진 상태를 표현하기 위해 status 201을 이용한다. 미들웨어 Middlewarerouterbody-parserreq - res 중간에서 req을 처리하거나 원하는 형태로 res을 수정하는 것을 미들웨어라고 한다. req가 서버에 도착하기 전 작업 parsing: req body에 포함된 값(아이디, 비번 등)을 앱에서 읽을 수 있는 형태로 변환한다.아이디, 비밀번호 값으로 사용자 인증한다 + 폼 내용 검증 라우팅 처리: 특정 URL로 들어온 re..
-
git으로 협업하기 위한 git flow 이해하기0515분나는 지금까지 개인 프로젝트를 깃에 올리지 않았다. 수정할 때마다 새로 커밋하는 것도, 잘못된 명령어 하나로 로컬이 원격과 연동되어버리면 다시 복구하느라 시간 쏟는 과정이 아까웠다. 하지만 이제는 협업을 위해 배워야 한다.개인 브랜치 사용: 로컬 코드를 원격 저장소에 올리는 코드1. git status2. git add .3. git commit -m "설명 추가: 현재 변경 내용 요약"4. git checkout -b 5. git push origin git branchgit push --set-upstream origin // git push 만으로 자동으로 원격과 연결 개인 프로젝트면 커밋 후 푸시했을 때 충돌이 거의 안난다. 로컬 리포과 원격 리포에 차이가 없기 때문이다.협업을 위해 git fl..
-
[Vue] 생명주기0515분Vue.jsVue.js - 프로그래시브 자바스트립트 프레임워크ko.vuejs.org프로젝트가 커질수록 부모, 자식 관계가 많아질텐데 각 컴포넌트의 생명주기를 알아야 완성도 있는 구현이 가능하다. Todo list 페이지를 사용한다고 하면 아래와 같은 흐름으로 로딩되어 화면이 구성된다. index.html -> main.js -> App.vue -> Todolist.vue -> Todolist components - TodolistItem메인 엔트리 포인트: App.vue 로딩PostList 컴포넌트가 로딩됨 ()PostList.vue: 게시글 목록을 불러와 자식 컴포넌트인 PostItem.vue로 전달onMounted가 실행되면서 API 호출로 데이터를 가져옴posts에 데이터가 업데이트되면서 자동으로..
-
비동기데이터 처리를 위한 폼 태그 API 이해0503분폼 태그에서 받아온 정보를 DB에서 수정해보자우선 프론트에서 폼을 다룰 때 name을 지우면 안된다. name이랑 id의 차이가 없는 것 같아서 둘 중 하나를 지우고 싶었다. 서버에서 폼을 인식할 떄는 name 속성을 이용하므로 name을 냄겨두도록 하자. HTML 은 GET, POST만 가능하다.정보 수정 페이지 폼에서 버튼 클릭과 동시에 정보를 서버에 보내려면 PUT, DELETE 요청은 어떻게 사용해야할까?1. AJAX (Asynchronouss Javascript And XML)XMLHttpRequest라는 HTTP 요청을 만들어 요청 방식과 넘겨줄 정보를 지정하는 비동기 통신 방법을 말한다.// xhr 객체를 만들고 open 함수를 이용해 form POST to PUT/DELETEdocumen..
-
[Node.js][MongoDB] MVC 모델의 Controller 작성하기0421분*Node.js 프로그래밍 입문(고경희)를 읽고 작성한 글입니다. Design Architecture코드 관리를 편리하게 하기 위해 기능이나 역할에 따라 여러 파일로 나눈 뒤 연결해 사용하는 개념 백엔드는 주로 MVC 패턴 이용백엔드는 API 개발이라고도 볼 수 있는데, 이 API를 애플리케이션으로 만들려면 인터페이스(UI)가 필요하다. { UI: View, API: Controller, DB: Model }모델과 뷰는 컨트롤러를 통해서만 정보 전달이 일어나므로 뷰와 모델은 완전히 분리된다.브라우저가 POST를 통해 자료를 만들때도 컨트롤러를 거쳐 DB에 값을 저장하고, DB에서 값을 가져와 브라우저 화면에 출력할 때도 컨트롤러를 거쳐 모델에서 뷰로 정보가 이동한다. 영역역할설명ModelDB와 연결해 데..
웹 애플리케이션 개발을 위한 웹 기본 동작 원리를 익혀본다.
1. 네트워크: HTTP
웹은 HTTP라는 프로토콜을 기반으로 브라우저와 서버가 메시지를 주고 받으면서 동작한다.
브라우저가 HTML을 통해 서버에 요청(request)을 전달하면 서버는 request와 함께 전달된 사용자 정보를 추출해서 요청된 기능을 처리한다. 이때 서버에서 사용자 request를 처리하는 대표적인 자바 기술이 Servlet이다.
- 서블릿은 Spring MVC에서도 이어지는 개념이니 용어가 익숙해져야 한다.
웹 앱 개발은 TCP 기반의 HTTP를 이해하는 것으로 시작한다. 네트워크 사용할 때 사용하는 통신 규약이므로 웹 프로그래밍 개발을 위해 동작 원리를 익혀야 한다.
히히 끼워팔기
TCP/IP 와 UDP
*이것이 자바다(3판)을 보고 작성한 글입니다.IP: Internet ProtocolIP 주소는 네트워크 어댑터(LAN 카드)마다 할당된다.DNS(Domain Name System)Web browser 웹 명령어 ipconfig / ifconfig웹브라우저가 DNS를 거쳐 웹서
ahranah.tistory.com
HTTP Protocol 기초
*Node.js 프로그래밍 입문(고경희)를 읽고 작성한 글입니다. 클라이언트는 서버로 자료를 요청하고, 서버는 클라이언트로 자료를 전송하는 방식으로 웹이 동작한다. HTTP requestHTTP response 근데
ahranah.tistory.com
2. 서버의 구성: 톰캣과 서블릿
앞서, 서버가 클라이언트의 request를 처리하는 대표적인 기술이 서블릿이라 했다.
서블릿은 JSP와 함께 동적 콘텐츠를 작성할 수 있는 자바 기술이다. 서버를 구성하는 부품은 자바로 구현 가능한 것으로 이뤄지는데, 자바로 구현한 웹 애플리케이션은 기본적으로 서버 사이의 이식성이 보장되기 때문이다.
톰캣 서버를 기반으로 개발된 웹 앱은 제우스나 웹로직 같은 다른 서버에서 실행해도 동일하게 실행된다. 이렇게 서버 사이의 이식성을 보장하기 위해서 기본적으로 웹앱이 모든 서버가 인식하는 정형화된 디렉터리 구조를 유지해야만 한다.
- 서버 사이 이식성을 보장하기 위해 자바로 구현한 Servlet, Tomcat 서버를 이용한다.
- 서버 사이 이식성을 보장하기 위해 정형화된 디렉토리 구조를 유지한다.
2-1. 서버 동작의 개요
웹 애플리케이션 컨테이너(예: Tomcat, Jetty)는 서블릿이 안정적으로 실행되기 위한 공통 환경을 제공한다. 구체적으로는 HTTP 요청·응답을 관리하고, 서블릿의 생성·초기화·소멸(lifecycle)을 제어하며, 보안·트랜잭션 같은 엔터프라이즈 기능을 대신 처리한다. 개발자는 이 복잡한 기반 구조를 직접 구현할 필요 없이 비즈니스 로직에만 집중할 수 있다.
- 쇼핑몰 장바구니 할인에서 아래와 같은 내용이 비즈니스 로직이다.
- 사용자가 장바구니에 담은 상품들의 가격과 수량을 합산해 총 주문금액을 계산
- 할인 적용 기준 검사 - 계산된 금액이 “10만원 이상”이면 10% 할인을 적용
서블릿을 여러 개로 나누는 이유는 관심사의 분리(Separation of Concerns)와 재사용성 때문이다. 예를 들어 “로그인 처리”, “게시판 목록 조회”, “파일 업로드” 같은 기능을 각각의 서블릿 클래스로 구현하면 유지보수가 쉽고, URL 맵핑을 통해 기능별로 요청을 간편히 분배할 수 있다. 각 서블릿은 자신에게 맡겨진 책임만 수행하기 때문에 테스트·디버깅도 명확해진다.
컨테이너는 실행 환경을 표준화하고, 서블릿 분리는 모듈화를, 멀티스레드는 성능 최적화
- 클라이언트 요청
- 웹 브라우저가 특정 URL로 HTTP 요청을 보냄
- 요청은 먼저 웹 서버(예: Apache httpd, Nginx)로 들어감
- 서블릿 컨테이너 전달
- 웹 서버는 요청을 서블릿 컨테이너(예: Tomcat)의 접속 포트로 포워딩
- 컨테이너는 요청 URL에 매핑된 Servlet 클래스를 찾음
- 서블릿(Servlet) 실행
- doGet()/doPost() 메소드에서 비즈니스 로직 수행
- 필요 시 DB와 연동하여 데이터 조회·가공
- 조회한 결과를 request.setAttribute("data", 값) 등에 담아 JSP로 전달
- JSP 호출 및 화면 결합
- 서블릿이 RequestDispatcher.forward("/view.jsp")로 JSP 실행 지시
- JSP는 HTML 템플릿 코드에 서블릿에서 설정한 request 데이터를 삽입하여 동적 페이지(HTML) 생성
- 응답 반환
- 생성된 HTML은 다시 서블릿 컨테이너 → 웹 서버 → 클라이언트 순으로 전송
- 브라우저가 수신한 HTML을 렌더링
멀티스레드 지원하여 한 대의 서버 프로세스에서 수십, 수백 개의 요청을 동시에 처리할 수 있다. 쓰레드 풀에서 각각의 요청을 병렬 처리하여 다수 요청에서 응답 지연을 줄인다. 단, 스레드 간 공유 자우너에 대한 동기화 처리가 필요해 코드가 복잡해지고, 교착 상태나 race condition을 주의해야 한다.
- 단일 스레드: 순차적 처리 → 구현이 단순하고 디버깅이 쉬우나, 동시 접속이 늘어나면 대기 시간 증가
- 멀티스레드: 병렬 처리 → 처리량이 높고 확장성이 좋으나, 동시성 제어와 컨텍스트 스위칭 비용을 고려해야 함
*채쌤의 Servlet&JSP 프로그래밍 핵심(채큐태)를 읽고 작성한 글입니다.
'KB_ITs_Your_Life_6th > Spring' 카테고리의 다른 글
스프링 프레임워크 기본기 (1) | 2025.06.09 |
---|---|
JDBC 프로그래밍 (1) | 2025.06.05 |