전체 글

Jisung Jung의 기술블로그
DevOps

[AWS] EC2 서버에 HTTPS 적용하기 (2)

https://zzzzseong.tistory.com/58 [AWS] EC2 서버에 HTTPS 적용하기 (1) 개요 부트캠프 프로젝트를 하면서 HTTP를 HTTPS로 업그레이드하기 라는 추가 요구사항이 있었다. 맡은 파트를 일찍 끝내고 어떤걸 할까 고민하던 와중에 해당 주제에 흥미가 생겨 서버의 프로토콜 zzzzseong.tistory.com 해당 글은 위 포스트와 이어지는 글입니다. 개요 지난 글에서 HTTPS 통신을 위해 ACM에서 SSL인증서를 발급받고 CNAME 유형 레코드를 생성하는 부분까지 살펴보았다. 이번 글에서는 CNAME 값을 도메인에 매핑하고 로드밸런서와 A 유형 레코드를 생성해 최종적으로 도메인을 이용한 HTTPS 통신을 테스트 해보자. 가비아 내 도메인에 CNAME 등록 웹을 넘어 ..

DevOps

[AWS] EC2 서버에 HTTPS 적용하기 (1)

개요 부트캠프 프로젝트를 하면서 HTTP를 HTTPS로 업그레이드하기 라는 추가 요구사항이 있었다. 맡은 파트를 일찍 끝내고 어떤걸 할까 고민하던 와중에 해당 주제에 흥미가 생겨 서버의 프로토콜을 HTTPS로 바꿔보기로 했다. 해야할게 좀 많아 어려워보일 수 있는데 좋은 참고자료를 찾아서 하루안에 EC2에 올라가있는 서버의 프로토콜을 HTTPS로 성공적으로 전환할 수 있었다. 가비아 도메인 구매 HTTPS로 통신하기 위해서는 SSL인증서를 발급받아야한다. SSL인증서는 소유하고 있는 도메인에 대한 보안 인증서이고 SSL인증서를 발급받기 위해서는 도메인이 필요하다. 무료 도메인을 찾아보고 있었는데 무료라 그런지 대부분 평이 좋지는 않았고 가비아에서 매우 싼 가격으로 도메인을 구입할 수 있다는 정보를 얻었..

Backend, Spring

[Spring] @Pattern과 @Valid를 이용한 유효성 검증

개요 지금까지 사용자의 아이디, 비밀번호를 검증하는 코드를 Service 레이어에서 조건문을 이용해 작성했었다. 부트캠프 멘토님의 테스트 코드를 분석하면서 @Pattern과 @Valid를 이용해 입력값을 검증할 수 있다는 사실을 알게되었고 Service 레이어의 코드를 줄이고 예외처리의 가독성이 높아지는 것에 매력을 느껴 해당 방식을 사용하기로 결정하였다. 해당 방식의 사용 방법을 알아보자. DTO에서 @Pattern 사용 @Pattern은 DTO레벨에 정규표현식과 함께 선언해주면 되는데 이를 이용하기 위해서는 아래와 같이 dependency를 추가해야한다. implementation 'org.springframework.boot:spring-boot-starter-validation' 다양한 방면에서..

Backend, Spring

[Spring] 단위테스트(Unit Test)

JUnit Test 기본 기능들 @BeforeEach @AfterEach @BeforeAll @AfterAll @Nested @DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.") class Test1 { @Test @DisplayName("Test1 - test1()") void test1() { System.out.println("Test1.test1"); } @Test @DisplayName("Test1 - test2()") void test2() { System.out.println("Test1.test2"); } } @Nested @DisplayName("Test2 다른 주제") class Test2 { @Test @DisplayName("Test2 - test1()") ..

Backend, Spring

[Spring] @Builder를 이용한 DTO 생성

목표 얼마전에 Spring기반의 익명 게시판 서버만들기 과제를 진행했다. 과제를 제출하고 멘토님께서 코드리뷰를 해주셨는데 그 중 DTO에 @AllArgsConstructor보다는 생성자 레벨의 @Builder를 이용하는것을 권장한다는 내용이었다. 이번 글을 통해 Builder가 무엇인지, 왜 @AllArgsConstructor가 아닌 @Builder의 사용을 권장하는지 그 이유에 대해 알아보고자 한다. Builder Pattern 누구나 한 번쯤은 객체를 생성하기위해 생성자에 많은 매개변수를 입력하다가 데이터를 잘못 전달했다거나, 객체 필드의 수정이 이루어질때마다 생성자를 변경해 기존 코드를 수정했다거나, 객체 생성을 위해 필요하지 않은 데이터를 억지로 집어넣는 등 객체 생성자와 관련하여 겪은 다양..

Backend, Spring

[JPA] 복합키

@Embeddable을 이용한 PK 테이블 생성 SNS 백엔드 서버의 팔로우 기능을 구현하면서 서로 다른 유저의 관계를 Follow 테이블로 묶어야 하는 일이 발생했다. 저번 프로젝트에서 멘토님이 이런 경우 복합키를 사용하는 것을 추천해주셨는데 이번에 적용해보기로 했다. 복합키는 아래와 같이 PK테이블을 별도로 만들어 사용하면 되는데 @Embeddable을 이용해 구성할 수 있다. 아래와 같이 관계를 엮을 두개의 키를 선언해주면 되고 해당 FollowPK를 이용하는 Follow 테이블은 기존 방식처럼 follow_id를 가지는 것이 아니라 아래처럼 두개의 id를 PK로 가지게 되는 것이다. @Embeddable @EqualsAndHashCode @NoArgsConstructor(access = Acces..

NBCamp

[5주차 개인과제] 익명 게시판 서버 개발

목표 5주차 개인과제로 익명 게시판의 API서버를 개발하는 과제를 받았다. 과제를 제출하고 멘토님께서 앞으로 유지해야할 부분과 개선해야할 부분에 대한 몇 가지 피드백을 주셨고, 과제 코드를 리팩토링한 코드와 과제를 수행하며 느낀점을 회고하고자 글을 작성한다. GitHub - zzzzseong/sparta_todo_app_backend: 내일배움캠프 Spring 3기 5주차 개인과제 스파르타 익명 게시판 내일배움캠프 Spring 3기 5주차 개인과제 스파르타 익명 게시판 서버. Contribute to zzzzseong/sparta_todo_app_backend development by creating an account on GitHub. github.com 과제 피드백 1️⃣ 전체적인 코드가 매우..

Backend, Spring

[JPA] 즉시로딩과 지연로딩

목표 Jpa 즉시로딩과 지연로딩의 개념에 대해 알아보자. 즉시로딩과 지연로딩의 개념을 이해하기 위해서는 Jpa Proxy 객체 개념의 이해가 선행되어야 한다. Proxy에 대한 이해가 없다면 JPA Proxy란? 을 먼저 보면 좋을 것 같다. 즉시로딩(EAGER)과 지연로딩(LAZY) 즉시로딩(EAGER Loading) Hibernate는 지연로딩과 즉시로딩, 두 가지 로딩 전략을 제공하는데, 즉시로딩은 연관된 엔티티를 한 번의 쿼리로 함께 로딩하는 방식을 말한다. 즉시로딩을 사용하면, Entity와 연관된 모든 Entity들이 한 번에 로딩되므로, 필요한 데이터를 즉시 사용할 수 있다. 연관관계 annotation 속성에 "fetch = FetchType.EAGER"를 추가하여 사용할 수 있다. 예를 ..

Database

[SQL] UNION과 UNION ALL

Table간의 합연산 UNION UNION의 개념은 매우 쉽다. Table간의 합연산인데 A테이블과 B테이블의 합집합 테이블인 C테이블을 만드는 것이라고 보면 된다. 또한, UNION은 연산시 중복제거, 정렬 기능을 제공한다. 예제를 보면서 차근차근 이해하는게 훨씬 쉬우니 아래 두개의 테이블을 시작으로 서로 비교해가면서 UNION에 대해 이해해보도록 하자. 아래와 같이 Column이 모두 같은 user1, user2 테이블이 있다. 두 테이블을 합치려면 어떻게 해야할까? 아래와 같이 두개의 테이블에 UNION을 사용하면 된다. user1과 user2의 인스턴스가 모두 합해져 잘 출력되는것을 볼 수 있다. SELECT * FROM USER1 UNION SELECT * FROM USER2; ✅ Column의..

Jisung Jung
Jisung Jung의 기술블로그