본문 바로가기

전체 글43

[Network] TCP 3-way handshake & 4-way handshake TCP 3-way handshake & 4-way handshake 란 클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정이다. 3-way handshake (이동) 4-way handshake (이동) 기타 질문 (이동) 3-way 인 이유? 2-way 로는 부족한가? TCP 의 연결 설정 과정과 연결 종료 과정의 단계가 차이나는 이유? Server 에서 FIN 플래그 전송 전에 전송했던 패킷이 FIN 패킷보다 늦게 도착한다면? ISN 이 0부터 시작하지 않고 난수를 생성해서 설정하는 이유? 용어 설명 SYN : Synchronize Sequence Number ACK : Acknowledgement 포트 설명 CLOSED : 포트가 닫힌 상태 L.. 2022. 9. 19.
[Git] git 실수로 변경한 파일의 변경사항을 되돌리는 방법 필요한 부분에 따라 링크를 해두었으니 '이동' 을 통해 확인하면 좋을 것 같다. 문제상황설명 (이동) 내가 생각한 문제 해결 방식 2가지 (이동) 첫 번째 방식이 부적절하다고 생각하는 이유 (이동) 해결한 방법 (이동) 두 번째 방식이 적절하다고 생각하는 이유 (이동) 1. 문제상황설명 하나의 repository 안에 backend 와 frontend 파일을 위치시키고 버전을 관리하고 있었는데, 다른 프론트엔드 팀원에게 backend 폴더가 PR 변경사항에 잡혔다고 연락이 왔다. 프론트엔드에서 backend 폴더에 작업 내용이 있을 리 없으니 당연히 변경사항으로 잡힐 일이 없는데, 뭔가 실수가 있었던 것 같아 원래대로 되돌려야 하는 상황이었다. 2. 내가 생각한 문제 해결 방식 2가지 이 때 생각난 방식.. 2022. 8. 20.
[예외처리] @Valid 예외처리에 사용되는 BindingResult 객체는 무엇일까? 이번 글에서는 @Valid 에 의해 발생되는 MethodArgumentNotValidException.class 에 속하는 'BindingResult' 에 대해 알아보고자 한다. 문제 상황, 찾아보게 된 계기 - MethodArgumentNotValidException 에 속하는 BindingResult 가 무엇인가? (이동) 학습 과정 - BindingResult 파고들기 (이동) 결론 - 예외처리 코드가 동작하는 원리에 대한 이해 (이동) 1. 문제상황 - MethodArgumentNotValidException 에 속하는 BindingResult 가 무엇인가? 더보기 https://github.com/cheese10yun/spring-jpa-best-practices/blob/master/doc/s.. 2022. 7. 17.
Nested Class 에 언제 static 을 붙여야 할까? 이전 DTO 는 어떻게 구성하고, 변환해야 할까? 글에 이어서 dto 를 inner class 로 묶을 때, 각 class 에 static 을 붙여주는 것이 좋은데, 이 상황에서 왜 static 을 붙이는 것이 좋은지 설명하려다 보니 Java 의 Nested Class 부터 알고 넘어가면 좋을 것 같아 정리하게 되었다. Nested Classes, Terminology (이동) Nested Classes 를 왜 사용하는가? (이동) Inner Classes (이동) Static Nested Classes (이동) DTO 를 Nested Classes 로 묶을 때 왜 static 을 붙이는 것이 좋은가? (이동) 1 ~ 4 까지는 oracle 의 공식 문서에서 필요한 내용을 번역한 것이며, 5번이 결론이다.. 2022. 7. 13.
DTO 는 어떻게 구성하고, 변환해야 할까? 지난 번에 DTO 를 사용해야 하는 이유 를 정리해 본 후, 어떻게 매핑하면 될 지에 대해서도 한 번 정리해둔다면 내 생각을 말할 때 많은 도움이 될 것 같다고 생각했다. DTO class 를 어떻게 구성하고 변환할 것인가 1. 처음 공부했던 방식 (이동) 2. 개선했던 방식 (이동) 3. 각 방식에서의 장점과 단점, 내 생각 (이동) 4. 그 당시와 지금의 생각 (이동) 1. 처음 공부했던 방식 처음 Spring Boot 를 접하고 공부를 시작할 때에는 위와 같이 DTO class 들을 작성했었다. DTO 디렉토리 아래에 나름 편하게 구분하고 싶어서 {POST / GET / PATCH / DELETE} + {작업내용} + {Req / Res} 와 같은 네이밍을 가져갔었다. Entity - DTO 매핑방.. 2022. 7. 13.
DTO 를 사용해야 하는 이유 1. 필요한 데이터만을 응답으로 줄 수 있다. 클라이언트로 넘겨줘야 할 정보는 API 마다 상이하다. Entity 자체를 클라이언트에 대한 응답으로 넘기는 것은 불필요한 데이터를 포함할 수 있으며, 혹시 모를 민감 정보 노출 등의 문제를 일으킬 수 있다. 2. Entity 구현을 캡슐화하여 보호할 수 있다. DTO 가 없다면 클라이언트의 요청과 Entity Model 이 강하게 결합되어 클라이언트에서의 요구사항 변화가 Entity 에 영향을 끼치기 쉽다. Entity 는 도메인의 핵심 로직, 속성을 갖고 있으며, 실제 DB 테이블에 대응되는 클래스이므로 함부로 변경되지 않도록 보호되어야 한다. 3. Validation 코드와 Entity 속성 코드를 분리할 수 있다. Entity class 에는 @Col.. 2022. 7. 11.
[Spring] IoC, DIP 와 DI 이해하기 https://youtu.be/8lp_nHicYd4 '우아한 Tech' 채널의 [10분 테코톡] 영상을 정리합니다. 더보기 00:34~01:35 : IoC '제어' 와 '역전' 의 의미 01:36~04:27 : IoC 는 왜 필요할까? 무엇이 달라질까? 04:28~07:25 : DIP 란? 07:26~07:58 : IoC 와 DIP 의 목적 07:59~10:13: 중간정리, IoC 와 DIP 를 적용한 코드와, 그렇지 않은 코드의 차이 10:14~11:03 : DI '의존성' 의 의미 11:04~12:25 : 의존성 주입의 3가지 방법 (생성자, setter, Interface) 12:26~13:04 : 의존성 분리 방법 : DIP 13:05~13:44 : 중간정리, principle :.. 2022. 6. 25.
[ERD 설계] 인스타그램 - ERD 설계 UMC 2기 4주차 과제로 인스타그램 데이터베이스 설계를 하게 되었다. 과정의 경우, 이전에 작성했던 '오늘의집 - ERD 설계' 때와 마찬가지로 요구사항 분석 (최종적으로 어느 기능까지 구현하고자 할 것인지)을 토대로 논리적 데이터 모델링을 진행했다. 1. 요구사항 분석하기 회원가입은 전화번호 or 이메일로 본인인증을 거친다. 본인인증 후 이름, 비밀번호를 입력한다. (비밀번호는 6자 이상, 숫자/영문/특수기호 포함) 생일을 추가하면 회원가입 완료 (만 14세 이상을 확인, 광고 개인화 등의 목적을 가짐) (프로필사진, 이름, 닉네임, 웹사이트, 소개) 는 '오픈 프로필' 에 해당, (이메일, 전화번호, 성별, 생일) 은 '개인정보' 에 해당. 이 중 사용자 이름, 전화번호만 필수항목 회원끼리는 팔로워.. 2022. 4. 7.
[Spring boot] 테스트코드의 필요성 이동욱님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 를 읽으며 새롭게 공부한 내용에 대해 정리합니다. chap2 에서는 단위 테스트의 필요성 간단한 테스트코드 작성 롬복을 사용하여 DTO 편하게 다루기 등의 내용이 있었다. 그 중 테스트코드의 필요성에 대해 작성하고자 한다. 1. 단위 테스트의 필요성 첫 번째 이미지는 단위 테스트코드를 작성하여 진행했던 프로젝트이고, 두 번째 이미지는 테스트코드를 몰랐을 때 전부 API 테스트 도구로 테스트했던 프로젝트이다. 책에서 단위테스트가 필요한 이유로는 ​빠른 피드백 / 자동검증 / 기존 기능의 정상 동작 보장 을 꼽았다. 이 책을 진작에 읽었어야 하는지, 아니면 겪어보았기 때문에 더 공감이 가는 것인지는 모르겠지만 정말정말 공감가는 내용이었다. 1. .. 2022. 4. 5.