전체 글(86)
-
SSL(TLS)은 어떻게 동작하는가?
대칭키와 비대칭키 대칭키 : 암호화와 복호화에 같은 키를 사용. ex) 숫자를 앞뒤로 뒤집는 방법을 대칭키로 사용한다면, ‘1234’ 가 주어졌을 시 암호화된 숫자 → 4321 복호화된 숫자 → 1234 비대칭키(공개키 암호화 방식) : 암호화와 복호화에 다른 키를 사용. ex) 숫자에 “42135를 곱하는 방식”으로 암호화하고 “42135를 나누는 방식"으로 복호화하며, 1234가 주어지면 암호화된 숫자 → 1234 * 42135 = 51994590 복호화된 숫자 → 51994590 / 42135 = 1234 SSL, SSL의 동작 방식 SSL이란?) 인터넷 상에서 정보를 암호화해서 송수신하는 프로토콜. 클라이언트와 서버 간 통신을 보증하기 위해, SSL 인증서를 통한 제 3자(CA)가 개입한다. 대칭..
2022.03.02 -
@Autowired 를 가급적 쓰지 말라는 이유
@Autowired 는 생성자 주입 방식 시에도, 필드 주입 방식 시에도 사용할 수 있음. 따라서 @Autowired 를 가급적 쓰지 말라는 이유는 두 가지로 분류할 수 있음. (생성자 주입, 필드 주입 둘 다 포함)@Autowired 자체의 어떠한 단점으로 인해 사용을 지양하는 것이 좋으며, 그 단점이 무엇인지? @Autowired 를 적용한 필드 주입 방식보다는 생성자 주입 방식을 왜 선택해야 하는지 1. @Autowired 자체의 어떠한 단점으로 인해 사용을 지양하는 것이 좋으며, 그 단점이 무엇인지? 순환 참조가 발생할 수 있음. 순환 참조가 발생할 경우, 컴파일 타임 시 에러가 잡히지 않다가 로직이 실행되는 런타임 시에 에러가 잡힘. 컴파일 때 에러가 잡히지 않으니, 애플리케이션이 정상적으로 작..
2022.03.01 -
Stereotype Annotation 및 bean 등록 과정
stereotype annotation - 가장 기본적인 어노테이션. @Component, @Repository, @Service, @Controller, @Configuration이 있음. @Repository, @Service, @Controller, @Configuration은 @Component 어노테이션을 포함하고 있음. 스프링/스프링 부트는 @ComponentScan 을 통하여 빈들을 찾고, 등록함. basePackages, basePackageClasses로 스캔 시작할 위치를 지정, 생략시 스캔 위치가 현재 클래스의 패키지로 지정. ComponentScanAnnotationParser가 @ComponentScan를 읽으며 설정 파일 파싱. ComponentScanAnnotationParse..
2022.03.01 -
5. 서비스 아키텍처 구성
간단한 아티클 조회 프로그램을 만들어 보았다. 의도한 대로 서비스는 제대로 동작한다. 이제 추가 / 수정 / 삭제 등의 나머지 기능을 구현할 차례이다. 이번 프로젝트는 서버 운영과 지속적, 무중단 배포를 연습하기 위해, 먼저 서비스 배포를 하고 추가 기능을 구현할 것이다. 그래서 서비스 아키텍처를 구성해 보았다. 1. 기본 서비스 아키텍처 AWS EC2가 기본적으로 제공하는 t2 인스턴스 한 대만 빌리고 톰캣 서비스 서버 또한 한 대만 돌아가는, 가장 기본적인 서비스 아키텍처이다. 사용자 요청 처리 최적화보다는, 배포가 문제없이 수행되는지, 톰캣 서버는 문제없이 작동하는지, 사용자의 요청을 처리할 수 있는지 등 기본적인 세팅 사항 동작 여부를 체크하는 용도로 아키텍처를 설계하였다. 하지만 t2 인스턴스 ..
2022.02.24 -
4. 아티클 전체 조회 기능 구현
프로젝트에서 구현해야 할 다양한 기능들 중에서, 아티클(게시글) 전체 조회 기능을 가장 먼저 구현하기로 결정했다. 그 이유는, '게시글 프로젝트'의 정체성이자 가장 중요한 기능이 바로 '게시글 조회 기능'이기 때문이다. 한편 엔드포인트와 그에 따른 response 포맷이 공개되어 있으므로, 이 프로젝트는 TDD로 구현하기 매우 적합하다. response 포맷을 그대로 테스트 케이스로 작성한 다음, 테스트를 통과하도록 코드를 구현하면 되기 때문이다. 중간 중간의 기록들을 공유하며 코드를 어떻게 짰는지 설명하려 했지만, 불찰로 인해 기록들이 날아가버렸다.(ㅠㅠ) 현재 남아있는 건 완성된 코드이다. 따라서 이번 글은 코드 작업의 비약이 크니 감안하고 읽어주시길 바란다. 1. ArticlesController ..
2022.02.20 -
3. 프로젝트 생성 및 mySQL DB 연동
1. 프로젝트 생성 본격적으로 프로젝트를 시작할 시간이다. https://start.spring.io/로 들어가서, 스프링 프로젝트를 생성한다. 그레이들 버전, 자바 11 버전으로 프로젝트를 생성하였으며, 이번 프로젝트의 템플릿 엔진으로는 타임리프를 사용, SQL 매핑 프레임워크로는 마이바티스를 사용할 것이다. 따라서 dependency에서 이 두개를 찾아서 추가해준다. 이 외에도 로그인 처리를 위한 spring security, 롬복 등을 추가해 준다. 후에 사용할 CI/CD 툴과의 연동을 위해서, 깃허브 저장소도 살포시 하나 만들어 준다. 깃허브 주소 : https://github.com/SangHoonly/real-world 2. mySQL 연동 먼저 mySQL 서버를 3306 포트로 띄운다.(기본..
2022.02.20 -
2. ER 다이어그램 작성
프로젝트를 구현에 앞서 엔티티들은 어떤 속성들을 가지고 있는지, 어떤 연관 관계가 있는지 먼저 파악하는 것이 중요하다. 엔티티들의 구조와 관계를 명확히 설계하면 스프링 / DB 단에서 도메인 객체 / 컬럼과 직접적으로 매핑시킬 수 있으며 엔티티들을 일관성있게 사용할 수 있기 때문이다. 엔티티들의 관계(Entity Relationship)와 특성을 파악하기 위해, ER 다이어그램(Entity Relationship Diagram)을 그려보자. 앞서 추출된 엔티티는 총 6가지이며 - 사용자(User) - 게시글(Article) - 댓글(Comment) - 선호(Favorite) - 팔로우(Follow) - 태그(Tag) 리얼 월드 response 포맷과 API 스펙을 바탕으로 각 엔티티들의 애트리뷰트를 추출..
2022.02.20 -
1. 요구 기능 확인 및 엔티티 추출
요구된 기능(https://realworld-docs.netlify.app/docs/implementation-creation/features/)을 한글로 풀어 써보면 다음과 같다. 1. JWT를 이용한 사용자 인증 (로그인 / 회원가입 페이지 + 설정 페이지 로그아웃 버튼 적용) 2. Users CRU 기능 (Delete 제외, 회원가입 & 설정 페이지 적용) 3. 게시글(아티클) CRUD 기능 4. 게시글(댓글) CRU 기능 (Delete 제외) 5. GET 요청을 통한 게시글 리스트(페이지네이션 적용) 보여주기 기능 6. 선호(Favorite) 게시글 기능 7. 다른 사용자 팔로우 기능 이쯤 되면 medium 그자체 이를 바탕으로 주요한 엔티티를 추출해 보면 1. 사용자 (User) 2. 게시글 (..
2022.02.20