스프링 부트 웹 애플리케이션을 실행시키면 내장 서블릿 컨테이너인 웹서버 톰캣을 사용해서 애플리케이션이 구동된다. 이 톰캣은 "아파치 톰캣"이라는 이름을 갖고 있다. 아파치란 무엇이고, 톰캣이란 무엇인지, 웹서버의 역활은 무엇인지 알아본다. Aapach 흔히 부르는 아파치는 Aapache HTTP Web Server를 의미한다. 이는 오픈 소스 소프트웨어 그룹인 아파치 소프트웨어 재단에서 만든 HTTP 웹 서버 프로그램이다. http 웹 서버는 http 요청을 처리할 수 있는 웹서버이고, 아파치 http 웹 서버는 아파치에서 만든 http 요청을 처리하는 웹 서버인 것이다. 클라이언트가 GET, PUT, UPDATE, DELETE 등의 요청을 보내면 프로그램이 그에 적절히 응답하는 기능을 한다. 현대 네트..
AOP : Aspect Orioented Programming Aspect를 중심으로 프로그래밍하는 기법이다. OOP를 보완하는 기술로 흩어진 Aspect를 모듈화 할 수 있도록 한다. 즉, 여러곳에서 사용되는 공통기능을 모듈화 하고 쓰이는 곳에 필요할 때 연결함으로서 유지보수 및 재사용성을 높일 수 있다. 예를들어 상품을 구매하거나, 글을 쓰거나, 댓글을 쓰는 등 다양한 기능에서 회원 검증을 하는 로직이 존재할 수 있다. 이러한 [회원 검증]로직을 Aspect로서 하나의 모듈화하여 사용할 수 있다. 위를 아래와 같이 기능별 Aspect로 볼 수 있다. AOP 주요 용어 Aspect 여러곳에서 쓰이는 공통기능(코드)를 모듈화 한것 Target Aspect가 적용되는 클래스 또는 메소드 Aspect가 갖고..
문제 : 스프링 부트 ec2에서 https 443포트로 배포시 에러 발생 프로젝트 진행 중 기존 ec2를 통해 애플리케이션을 배포할 때는 전혀 문제없이 배포가 되고 있었다. 이후 도메인을 얻고 ssl 인증서를 추가해서 https로 변경 후 443포트를 이용하도록 변경하고나서 다시 ec2로 배포를 하자 수많은 에러를 내뿜으면서 배포에 실패하였다. 에러 org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded ..
JPA란? JPA는 Java Persistence API 로 자바 영속성 API로 JDBC를 이용해서 데이터베이스를 관리하는 인터페이스이다. 대표적인 구현체로Hibernate가 있다. 자바 ORM기술의 표준 API이다. (Obejct Relational Mapping) 영속석 컨텍스트 JPA가 가장 중요시 여기는 것이 바로 영속성 관리이다. DB에 객체를 저장하기 위한 JPA이므로 영속성 관리는 매우 핵심적인 내용이다. 엔티티 매니저 팩토리와 엔티티 매니저 JPA는 쓰레드가 하나 생성될 때마다 (서비스 요청이 들어올 때마다) EntityManagerFactory에서 EntityManager를 생성한다. EntityManager는 내부적으로 DB 커넥션 풀을 사용해서 DB와 커넥션을 맺는다. 자세한 내용은..
HTTP 기본적으로 HTTP Protocol은 비연결성의 특징을 갖고 있으므로 실시간 통신을 하기에 적합하지 않은데, 이를 구현하는 방식 3가지를 알아보자 HTTP의 실시간 통신 방식 Polling Long Polling Streaming poilling 폴링 브라우저가 일정한 주기마다 서버에 HTTP 요청을 보내는 방식 실시간 데이터의 업데이트 주기는 예측 불가능하므로, 불필요한 요청에 따른 서버 및 네트워크의 부하가 늘어난다 실시간 야구 문자 중계같이 5~10초 주기로 계속 업데이트를 시키는 방식 단점 : time interval을 어떻게 잡냐에 따라 서버의 부하가 올라가거나 실시간성이 떨어지는 trade off 관계를 갖는다 사용 : 실시간성이 조금 떨어져도 되고 시간을 늘려 여러대의 클라이언트와 ..
서버에서는 API 호출에 대한 클라이언트 검증을 위해 요청 클라이언트에 대해 인증 절차를 거치는데 이를 위해 다양한 방식이 존재한다. 이 중 하나의 방식이 jwt 방식인데 Jwt을 알아보기전에 세션 & 쿠키 인증 방식을 먼저 알아보자. 세션 & 쿠키 인증 방식 세션 서버측에서 관리하는 사용자 정보를 말한다. 서버와 클라이언트의 연결이 활성화 된 상태로 클라이언트가 서버에 접속하면 클라이언트 정보를 서버 단에 저장하게 된다. 세션 ID를 발급해서 사용자를 구분한다. 쿠키 클라이언트측에서 관리하는 사용자 정보를 말한다. 키와 값으로 구성된 사용자 정보 파일이다. 유효시간을 명시해 줄 수 있다. 클라이언트의 상태정보를 저장하고 참조할 수 있다. (HTTP의 무상태를 커버할 수 있다) 사용자가 로그인 요청을 한..
ORM Object-Relational Mapping, 객체 관계 매핑 객체와 관계형 DB의 데이터를 자동으로 매핑해주는 것을 말한다. 객체 지향 프로그래밍 _ OOP는 클래스를 사용해서, 관계형 DB는 테이블을 사용해서 설계한다. 이런 차이로 인해 객체 모델과 관계형 모델 간 불일치가 존재할 수 있다. ORM 프레임워크가 이 중간에서 SQL을 자동으로 생성해서 불일치를 해결한다. DB 데이터 Object 객체를 통해 간접적으로 DB 데이터를 다룬다. SQL 쿼리가 아니라 메서드로 데이터를 조작할 수 있다. ORM이 객체간 관계를 바탕으로 sql을 자동으로 생성해주는 것이다. 대표적인 ORM 프레임워크로는 Hibernate가 있다. 즉, ORM은 DB와 OOP사이에서 관계를 매핑해주는 기술이고 JPA는 ..
사용자가 웹 페이지 form(HTML form)을 통해서 자신의 정보를 입력 (INPUT) servlet의 doGet() 또는 doPost() 메서드는 입력한 form data에 맞게 DB 또는 다른 소스에서 관련된 정보를 검색 이 정보를 이용하여 사용자의 요청에 맞는 적절한 동적 컨텐츠(HTML Page)를 만들어서 제공 (OUTPUT) 1. HTML Form input elements(Ex. 텍스트 상자)가 포함된 웹 페이지의 한 부분 사용자가 입력한 정보 (form contents)를 웹 서버로 전송하기 위한 submit element (Ex. 버튼)이 존재한다 action에는 form을 처리하는 서버 쪽 URL을 명시한다 클라이언트(Browser)가 요청하는 URL 정보 요청을 보낼 때 서버의 I..
MVC Architecture 정리 MVC architecture란 무엇일까? Model, View, Controller를 분리한 디자인 패턴을 말한다. Controller 컨트롤러는 데이터와 사용자 인터페이스 요소를 이어주는 중간 다리 역활을 한다. 사용자가 데이터를 수정하는 등 '이벤트'를 처리해야 함을 의미한다. Servlet (service) 요청 객체를 찾는 흐름 : Controller -> Service -> Dao -> DB [요구사항] 모델이나 뷰에 대해서 알고 있어야 한다. View와 Model 사이의 인터페이스 역활을 한다. 모델과, 뷰는 서로의 존재를 모른체 변경을 외부로 알리고, 수신하는 방법만 알고 있으므로 이를 컨트롤러가 중재해야한다. 컨트롤러는 뷰와 모델에 명령을 보낼 수 있다..
DAO DAO : Data Access Object의 약어로 DB에 접근하여 조회, 조작을 담당하는 것들을 통칭한다. DAO를 이용해서 Service와 DB를 이어주는 중간다리 역활을 한다. Persistence Layer이다. (DB에 직접 CRUD를 하는 계층) 왜 DAO로 구분하는 것일까? HTTP Request를 Web App이 받게 되면 매 Req마다 WAS에 전달이되면 매칭되는 Servelt이 메모리에 적재되고, servlet내 Service() 메소드가 호출되어 Thread Pool에 있는 쓰레드를 할당받아서 처리된다. | 이때, 비즈니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 Driver를 로드하고 Connection 객체를 생성하게 되면 엄청 많은 커넥션이 일어나므로 DB에 전담하..
기본적으로 운영환경과 테스트환경은 별도로 두는것이 좋다 웹 서비스의 DB로 h2를 사용해서 구현하고 있지만 테스트시에는 h2를 이용하지 않고 메모리 DB를 이용해서 테스트를 실행할 때 로컬 메모리로 저장해서 테스트 후 종료될 때 전부 삭제되는 방식으로 구현한다 방법 springboot의 test폴더 내에 resources폴더와 하위파일로 application.yml을 생성 spring: # datasource: # url: jdbc:h2:mem:test //해당 url을 이용하면 메모리모드로 테스트를 돌려준다 # username: sa # password: # driver-class-name: org.h2.Driver # # jpa: # hibernate: # ddl-auto: create # prope..
스프링 부트에서 Junit으로 테스트를 진행할 때 예외케이스를 테스트하는 경우 Junit4의 경우 @Test (expected = IllegalStateException.class) public void duplicatedMemberException() throws Exception { //given Member member1 = new Member(); member1.setName("mem1"); Member member2 = new Member(); member2.setName("mem1"); //when : 동일한 이름의 회원이 저장될 경우 IllegalStateException 발생 memberService.join(member1); memberService.join(member2); } 예외가 ..
- Total
- Today
- Yesterday