Server/Spring 51

Spring - 서버에서 객체를 JSON으로 변환 후 응답하기 (+ API 서버 만들기)

JSON 응답? 클라이언트는 서버를 거쳐서 DB에 접근합니다. 클라이언트가 DB에서 필요한 정보를 얻기 위해, 서버에게 데이터를 요청하면 서버에서는 클라이언트가 필요한 데이터 또는 그 데이터가 포함된 데이터를 보내줍니다. 이 때, 서버가 보내주는 데이터는 클라이언트가 해석하기 쉬우면 좋고, 내용이 간결해서 전송속도가 빠르면 좋을 것입니다. 그래서 사용하는 데이터의 형식 중 대표적인 하나가 JSON입니다. API 서버를 만들고, DB의 데이터를 꺼내서 JSON으로 변환하고, 생성한 API 서버에 출력하는 예제를 진행해보겠습니다. 클라이언트는 생성한 API 서버의 url로 접속(요청)해서 JSON 데이터를 가져가서 원하는 로직을 굴릴 수 있을 것입니다. Jackson 라이브러리 의존 추가 Jackson 라이..

Server/Spring 2021.01.28

Spring - 쿠키(Cookie)를 활용한 ID 저장하기 ../ 아이디 기억하기

쿠키란 ? 쿠키는 편리와 안전을 위해 웹서버에서 클라이언트(브라우저)를 거쳐 사용자의 장치에 설치되는 기록 정보입니다. 현재 쿠키는 웹사이트 접속시 로그인 정보나 사이트의 환경 설정, 항목 즐겨찾기, 최근 기록 등을 저장하는 등 다양하게 사용되고 있습니다. 사용자가 로그인 했던 ID를 저장해서 사용자가 로그인 할 때마다 번거롭게 ID를 입력하지 않게 하기 위해 쿠키를 사용하는 용도면 괜찮지만 쿠키로 자동 로그인을 구현하면 해킹당할 위험이 커집니다. 세션과 달리 쿠키는 서버측이 아니라 클라이언트에 데이터가 저장되기 때문에 PC에 개인 정보들이 흔적으로 남기 때문입니다. 대신, 서버측에서 데이터를 저장하는 세션과 달리 쿠키는 클라이언트측에서 데이터를 저장하므로 서버의 부담을 줄일 수 있습니다. 그리고 브라우..

Server/Spring 2021.01.21

Spring - 컨트롤러(Controller) 구현

GET / POST 방식 구현 @Controller public class RegisterController { @PostMapping("/submitReg") // GetMapping("/submitReg") public String register() { return "submitReg"; } } POST 방식으로 통신하려면 @PostMapping을 사용하고 GET 방식은 @GetMapping을 사용합니다. 각각 작성하면 전송 방식에 따라 다른 메서드가 처리하게 구현할 수도 있습니다 (메서드 이름은 경로와 상관없기 때문). 전송 방식에 상관없이 지정한 경로와 일치하는 요청을 처리하고 싶다면 @RequestMapping을 사용합니다. +스프링 4.2 버전 까지는 @RequestMapping의 metho..

Server/Spring 2021.01.01

Spring - 리다이렉트(redirect)

리다이렉트(redirect) 란? 리다이렉트(redirect)는 웹 브라우저(사용자)가 어떤 URL로 웹 서버를 요청했을때 다른 URL로 넘겨주는 것을 말합니다. 예를 들면, Gmail로 접속했을 때 로그인이 되어 있지 않다면, 로그인이 선행되어야 하기 때문에 로그인 페이지로 이동시키는 것을 리다이렉트라고 합니다. 구현 @Controller public class RegisterController { @RequestMapping("/register/step1") public String handleStep1() { return "register/step1"; } @PostMapping("/register/step2") public String handleStep2( @RequestParam(value =..

Server/Spring 2020.10.07

Spring - 스프링 MVC 프레임워크 동작 방식

Spring MVC의 동작 방식 흔히 설명할 때 Spring MVC의 동작 방식을 설명할 때 DispatcherServlet에 대해 설명하게 된다. 먼저 DispatcherServlet에 들어가기 전 단계에 대해 알아보자. Filter, Interceptor 우선 Filter의 경우 Spring Context 밖에 있다. 즉, 스프링과 무관하게 전역적인 처리를 할 때 사용한다. 이후에 DispatcherServlet을 지나서 Controller에 도달하게 되는데, 중간에 interceptor가 있을 수 있다. HandlerMapping에 의해 컨트롤러가 매핑된 다음에 요청을 가로채서 Interceptor가 동작을 수행한다. Spring 컨테이너 내부 스프링 컨테이너 내부는 다음 그림과 같다. 순서 정리 ..

Server/Spring 2020.10.06

Spring - 트랜잭션 처리

스프링에서의 트랜잭션 처리 트랜젝션(Transaction)은 두 개 이상의 쿼리를 한 작업으로 실행해야 할 때 그 작업의 단위가 트랜젝션입니다. 트랜젝션의 쿼리가 모두 성공해서 DB에 반영하는 것을 commit이라고 하고, 취소하고 되돌리는 것을 rollback이라 합니다. JDBC API로 트랜젝션을 처리하려면 Connection 클래스의 setAutoCommit(false)로 자동 커밋을 비활성화하고 수동 commit()과 rollback() 메서드를 이용해서 트랜젝션을 커밋하거나 롤백해야 합니다. 즉, 프로그램이 커밋을 못하게 막고 트랜잭션에 있는 쿼리들을 전부 수행후 성공하면(try의 끝) 커밋 하고 실패하면(catch) 롤백합니다. 하지만 위와 같이 작성하면 개발자가 실수했을 경우 문제가 발생할..

Server/Spring 2020.09.29

Spring - 로그백(Logback)

spring-jcl 스프링5는 자체 로깅 모듈 spring-jcl을 사용합니다. 이 모듈은 직접 로그를 남기지는 않고 다른 로깅 모듈을 사용해서 로그를 남기는 방식입니다. 어떤 로깅 모듈 의존이 존재하면 해당 로깅 모듈로 로그를 남깁니다. 그래서 사용할 로깅 모듈 의존을 추가해야 합니다. Spring Framwork JCL 인터페이스 Log4J(구현체) 즉, 위처럼 Log4J 의존이 존재하면 해당 모듈을 사용하고, 이를 빼고 다른 구현체를 끼워주면 또 해당 구현체가 작동합니다. Logback Logback은 Java에서 가장 많이 사용됬던 로깅 라이브러리 log4j의 후속 버전입니다. log4j에 비해 여러가지 기능이 추가되고 성능이 향상되었습니다. 구현체를 로그백으로 설정하는 방법을 예로 들겠습니다. ..

Server/Spring 2020.09.29

Spring - DataSource와 ConnectionPool이란? (+ HikariCP)

Spring - DataSource와 ConnectionPool이란? Spring으로 개발을 하다보면 DB에 접근 하다보면 DataSource와 ConnectionPool에 마주치게 된다. 두 개념에 대해 더 자세히 알아보자. DataSource DataSource는 DB 커넥션을 구하는 방법을 정의한다. 문서를 번역해보면 아래와 같다. DataSource는 드라이버 Vendor에 의해 구현되며, 세 가지 타입이 있다. 1. Connection 객체를 얻는 방법을 구현 2. Connection Pooling 방식을 구현 3. 분산 트랜잭션 구현 DataSource의 대표적인 구현체는 아래와 같다. HikariDataSource JdbcDataSource MysqlDataSource SimpleConnec..

Server/Spring 2020.09.23

Spring - AOP 프로그래밍 (관점 지향) [+ Proxy 패턴]

기본 설정 org.aspectj aspectjweaver 1.8.13 스프링 프레임워크의 AOP 기능은 spring-aop 모듈이 제공하는데 이는 spring-context 모듈에 포함 되어 있고 spring-context 모듈은 프로젝트를 생성하면 기본으로 의존에 추가되기 때문에 srping-aop 모듈을 따로 추가하지 않아도 됩니다. pom.xml 파일에는 aspectjweaver 의존을 추가합니다 태그 안에다가 넣으면 됩니다. 이 모듈은 스프링이 AOP를 구현할 때 사용하는 모듈이고 AOP를 설정하는데 필요한 애노테이션을 제공합니다. 프록시 public class RecCalculator implements Calculator { @Override public long factorial(long n..

Server/Spring 2020.09.18

Spring - 빈 라이프사이클과 범위

빈 라이프 사이클 스프링 컨테이너는 초기화와 종료라는 라이프사이클을 갖습니다. 아래 코드를 보면 컨텍스트 객체를 생성하고 스프링 컨테이너를 초기화합니다. // 1. 컨테이너 초기화 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class); // 2. 컨테이너에서 빈 객체를 구해서 사용 Greeter g = ctx.getBean("greeter", Greeter.class); g.method1(); // 3. 컨테이너 종료 ctx.close(); 이 때 스프링 컨테이너는 설정 클래스에서 정보를 읽어와 알맞은 빈 객체를 생성하고 각 빈을 연결(의존 주입)하는 작업을 수행합니다. 그 후 컨테이..

Server/Spring 2020.09.13