1. 로그인을 유지시킬 방법 우리는 클라이언트와 서버가 통신할 때 HTTP 프로토콜을 사용한다는 것은 알 것이다. 혹시 모른다면 HTTP & HTTPS 포스팅을 보고 오는 것을 추천한다. HTTP 프로토콜은 크게 두 가지 특징이 있다. 1-1. 비 연결성 서버와 요청을 하고 요청한 데이터를 서버가 받은 다음 그에 대응하는 응답을 보낸다. 이게 한번 통신이 일어나는 과정인데, 서버가 응답을 하고 나면 클라이언트와 연결이 끊어진다. 이것을 비연결성 이라고 한다. 1-2. 무 상태성 아까 비 연결성으로 인해 한번 통신을 하고 나면 클라이언트와 서버가 연결을 끊는다고 했다. 그럼 이전에 통신을 했을 때 주고 받았던 상태 정보가 남아있지 않아 새롭게 갱신을 시켜주어야 한다. 이건 생각보다 심각한 문제다. 만약 의..
Spring Security란 ? 스프링에서 제공하는 보안 관련 프레임워크다. 사용자의 요청에 대한 인증, 사용자가 권한이 있는지 확인하는 인가, 응답 등등 보안에 관련해서 많은 부분을 제공해주고 있기 때문에 개발자가 하나하나 보안에 대응하는 코드를 짜지 않아도 되는 장점이 있다. 대부분 우리는 Spring Security를 로그인 유지/페이지 권한 등에 사용한다. Spring Security를 좀 더 이해하기 위한 용어 의미들 위에서 Spring Security의 의미를 설명하면서 인증과 인가에 대해서 말했다. 그럼 인증과 인가의 정확한 의미는 뭘까 ? 인증, 인가 뿐만 아니라 나중에 나오는 중요한 용어들도 함께 정리해보았다. 인증(Authentication) : 사용자가 본인인지 확인하는 절차 인가(..
1. 프로젝트 생성 먼저 프로젝트를 생성해보자. 해당 사이트 으로 들어가서 아래와 같이 작성해주자. 그리고 intellij로 프로젝트를 실행하고 build.gradle파일을 찾아 dependencies에 아래코드를 복사해 붙여준다. implementation 'org.springframework.boot:spring-boot-starter-aop' 그럼 준비는 다 끝났다. 2. AOP 적용할 예제 작성 controller 패키지를 만들어주고 RestApiController 클래스를 생성하고 아래 코드를 작성하자. 아래코드는 간단한 get, post 매핑을 하여 로그가 찍히는지 확인하는 로직이다. User에 빨간줄이 뜨는 것을 알 수 있다. 그럼 User 객체를 만들어보자. dto라는 클래스를 만들고, U..
1. AOP란 ? Aspect Oriented Programming의 줄임말로, 관점지향 프로그램 이라고 한다. 스프링 어플리케이션은 특별한 경우를 제외하고 MVC 웹 어플리케이션에서 Web Layer, Business Layer, Data Layer 로 정의한다. 스프링 DI가 의존성에 대한 주입이라면, AOP는 로직에 대한 주입이라 볼 수 있다. 1-1. Web Layer REST API를 제공하고 Client 중심의 로직을 적용. 보통 요청에 대한 응답을 해주거나 HTTP 상태를 변경한다. Controller라고 생각하면 될 것 같다. 1-2. Business Layer 내부 정책에 따른 logic을 개발. 서비스 로직을 짜는 것이 Business Layer라고 볼 수 있다. Service라고 생각..
Thymeleaf 레이아웃 기능 xmlns:th="http://www.thymeleaf.org" 자주 사용하는 문법 th:text th:href th:insert th:each th:action th:value 이 정도가 있다. 그럼 하나하나씩 어떤 상황에 사용하는지 알아보자. th:text 텍스트 내용이다. 기본문법은 아래와 같다. th:text="${ data }" 서버에 담겨있는 데이터를 텍스트로 출력할 때 사용한다. 예를 들어 사용자가 게시글을 썼다고 가정해보자. 그럼 게시글의 제목을 화면에 출력해보자. th:href url을 적으면 그 url경로로 이동한다. 기본문법은 아래와 같다. 버튼이나 a태그로 특정 페이지로 이동하고 싶을 때 사용한다. 예를 들어 제목 조회에서 한 개의 게시판만 보고 싶..
api는 만들었는데 프런트가 없는 경우, 사이트프로젝트를 한 번 해봐야 하긴 하는데 프런트까지 신경쓰려면 공부할 양이 너무 많아져서 미루고 api만 잔뜩 만드는 경우, 어떻게 프런트 작업까지 완료를 했어도 api 끌어와서 퍼블리싱까지, 신경쓸 일이 너무 많다. 이러한 상황에 Thymeleaf를 적용하여 쉽게 뷰를 만들 수 있다. 맨날 Postman에서 확인하는 과정보다 훨씬 백엔드 api 개발에 재미를 붙일 수 있다. 이번 포스팅에서는 Thymeleaf를 적용하고 서버로 들어온 데이터를 화면에 출력해보자. 1. 작업 결과 미리보기 thymeleaf를 적용하여 간단하게 게시판을 구현해보았다. 디자인은 bootstrap을 가져왔다. 2. Thymeleaf 적용하기 Thymeleaf는 뷰 템플릿이기 때문에 의..
클론코딩을 하거나, 인강을 듣거나, 테스트케이스로 알맞은 로직인지 확인할 때 Builder패턴을 많이 사용하는 것을 봤다. 언뜻보면 생성자와 다른 점이 보이지 않았고, 필드 값이 적으면 Setter메서드를 사용하면 되는데 왜 Builder패턴을 강조하면서 이야기 할까? 그래서 Builder패턴에 대해서 알아보았다. 1. 자바빈즈 패턴 우리는 대부분 개발을 할 때, 객체 생성 후 내부 변수 세팅을 위해서 Setter메서드를 호출하는 방법을 쓰고 있다. setter 메서드로 객체 필드 값을 초기화 하는 방법을 자바빈즈 패턴 이라고 한다. 그런데 변수 갯수가 많은 경우는 어떨까 ? 아래코드는 회원의 정보를 나타내는 클래스와 setter로 객체를 초기화 시키는 방법이다. @Data public class Mem..
자동으로 의존관계를 설정할 수 있지만, 직접 스프링 빈으로 등록하는 방법이 있다. 파일을 한개 만들고 아래와 같이 코드를 작성한다. @Configuration public class SpringConfig { @Bean public MemberService memberService() { return new MemberService(); } } public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } 이렇게 작성하면 스프링이 Configurat..
회원 서비스를 구현하는 과정에서 생긴 문제이다. public class MemberSerivce() { private final MemberRepository memberRepository = new MemoryMemberRepository(); } class MemberServiceTest { MemberService memberService = new MemberService(); MemoryMemberRepository memberRepository = new MemoryMemberRepository; } (개발자가 new를 사용하여 필요한 객체를 직접 주입함) 위의 코드를 보면 MemberService에서 생성한 MemoryMemberRepository객체와 Test에서의 MemoryMemberR..
0. 개요 Spring으로 개발하다보면 Bean이라는 개념이 나온다. 대부분 annotation이라고 생각하지만, 막상 의미를 정의하라고 하면 헷갈리는 경우가 많다. 그래서 Bean에 대한 개념을 명확하게 정리해보고자 한다. 1. Java Bean Java Bean은 특정 형태의 클래스를 가리킬 때 사용된다. DTO형태가 Java Bean이라고 생각하면 쉽다. 필드는 private만 구성되어 getter와 setter로만 접근 할 수있고, 전달 인자가 없는 생성자를 가지는 클래스이다. getter / setter public의 no-argument 생성자 모든 필드는 private로 getter와 setter를 통해서만 접근이 가능 코드로 보면 이해가 쉽다 public class AboutJavaBean..
- Total
- Today
- Yesterday