전체 글

일상

회사 - 집 -병원 - 집

회사 - 집 -병원 - 집 - 회사 - 집 -병원 - 집 - 회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 - 집 -회사 - 집 -병원 -..

Dev/JPA

JPA와 트랜잭션, 락

프로젝트를 하던중에 동시성 문제에 대한 이해가 부족한것 같아서 정리해 보았다. 1. 트랜잭션 격리 수준 Isolation - 트랜잭션의 ACID 원칙중 I에 해당하는 Isolation은 여러 트랜잭션이 동시에 수행될때 다른 트랜잭션이 참조하지 못하는 성질을 말한다. Isolation Level 트랜잭션의 격리 수준은 트랜잭션이 어느정도 까지 비정합적인 참조를 허용하는지에 대한 것이다. 4가지 단계가 존재한다. Dirty Read - 트랜잭션 1이 데이터 수정 중 커밋하지 않아도 트랜잭션 2가 수정중인 데이터 조회 가능 - 트랜잭션 1이 롤백되면 데이터 정합성 문제 발생 Non-Repeatable Read - 한 트랜잭션 내에서 같은 데이터를 여러번 조회시 각 데이터 상태가 다른것 (중간에 다른 트랜잭션이..

Dev/개발일지

JWT 리프레시 토큰 적용하기

이 글은 JWT, 액세스 토큰, 리프레시 토큰 등에 대한 개념적 정리이다. 목차 1. 개선 이전 상황 2. 액세스 토큰, 리프레시 토큰 정리 3. 구현 내용 4. 자체적인 질문과 응답 1. 개선 이전 상황 나는 JWT를 통해 인증&인가 관련 기능을 구현하였었지만, 액세스 토큰과 리프레시 토큰을 구분하지 않고 만료시간이 일주일 정도로 긴 하나의 토큰만 사용중이였다. 이를 개선해 본다. 2. 액세스 토큰, 리프레시 토큰 정리 개선 이전의 내 방식은 어떤 문제가 있을까? 1. 토큰 만료일이 일주일로 매우 길다. 2. 토큰 탈취시 강제 만료시킬 방법이 없다. 사용자가 매번 로그인을 해야하는 불편함을 없애기 위해 만료시간을 길게 하였지만, 토큰을 탈취당하면 긴 시간동안 악의적 행동에 시달려야 하며, 만료일 전까지..

Dev/개발일지

서버에 HTTPS 적용하기

목차 1. HTTPS 란? 2. 내 서버 구조 3. HTTPS 적용 4. 작동 흐름 1. HTTPS 란? HTTP + SSL/TLS 프로토콜을 이용해 데이터를 암호화하는 통신 방식. 장점 1. 데이터 탈취 방지 HTTP는 보안에 취약하다. 신용카드나 주민번호와 같은 정보가 탈취당할수 있다. HTTPS는 데이터가 암호화 되기에 안전하다 2. 서버가 신뢰할수 있음을 보장 클라이언트 입장에서 통신할 서버를 믿을수 없다. 예를들어 클라이언트는 은행 웹사이트에 접속한줄 알았지만 피싱사이트일수도 있기 때문이다. CA가 발급한 SSL 인증서가 있는 서버(웹사이트)는 안전하다고 인증되었기에 신뢰할수 있다. 3. 검색 엔진 최적화 검색 엔진에 웹사이트가 노출될 확률을 높일수있다 2. 내 서버 구조 내 프로젝트 인프라는 ..

Dev/Spring

자바 스프링 예외처리 - unchecked, checked 예외

목차 1. 자바의 예외 2. checked vs unchecked 3. 예외 처리 전략 자바의 예외 자바에서 예외는 크게 3가지로 나뉜다. Exception - 검사 예외, checked Exception RuntimeException - 비검사 예외, unchecked Exception Error - 에러 이 중 에러는 개발자가 어떻게 처리 할 방법이 없으므로, checked, unchecked 예외를 잘 처리해야한다. (Exception, RuntimeException, Error 전부 아닌 Throwable 객체 - 만들지 말기. 쓸데없고, 햇갈리기만 함.) checked vs unchecked Exception(checked) RuntimeException (unchecked) 처리 여부 반드시 ..

Dev/Java

예외처리, 표준 예외 vs 사용자 정의 예외

이 글에서는 표준 예외와 사용자 정의 예외를 알아본다. 목차 1. 표준 예외, 사용자 정의 예외 2. 예외 선택 기준 표준 예외, 사용자 정의 예외 표준 예외: - 언어가 기본적으로 제공하는 예외 - IllegalArgumentException, IllegalStateException, NullPointerException... etc - 크게 3가지로 나뉜다. Exception - 검사 예외, checked Exception RuntimeException - 비검사 예외, unchecked Exception Error - 에러 장점 1. 사람들이 익숙함 2. 가독성, 유지보수성 좋음 사용자 정의 예외: - 사용자가 직접 정의하거나 표준 예외를 확장한 예외 - 예를들어, 은행 시스템에서 출금시 잔고가 모..

Dev/Spring

테스트 코드와 관련 프레임워크

최대한 간단하게 정리하고, 세부 구현은 레포 보기 목차: Test Double + mock vs stub JUnit Assertion AssertJ + 다른것과 비교 Mockito + 다른것과 비교 BDD TDD Test Double Test Double 스턴트맨을 stunt double 이라 한다. 여기서 따온 말이 test double이다. test double은 위험한 일을 대신 해준다. ex) 어떤 service를 테스트 할때, db와 관련된 영향은 배제해야 할 것이다. test double은 실제 db와 관련된 역할을 대신한다. Test Double을 예전에는 만들어 사용해야 했지만, 이제는 Mockito같은 프레임워크들이 기능을 제공하여 편하게 생성할 수 있다. 종류 크게 Dummy, Stub..

Dev/Spring

테스트 작성과 Jacoco

테스트를 작성하다가, 코드가 너무 많아져서 내가 어디를 테스트 안했는지 알 필요가 생겼다. Jacoco를 사용하면 테스트 커버리지를 쉽게 알수 있다. instructions: Java bytecode 명령 수 branches: 분기, 조건문 수 ex) 위 사진에서 컨트롤러는 분기가 거의없고 서비스에 요청을 전달만 하니까 저렇게 missed branches가 낮은것. 이렇게 테스트 커버리지를 확인하고, 더 작성해주면 이렇게 커버리지를 증가시킬수 있다. 색깔 초록색: 테스트 완료 노란색: 몇가지 상황중 하나만 테스트 완료 (성공 테스트는 완료 했으나, 실패 테스트는 없을때) 빨간색: 테스트 없음 커버리지 빌드시에 테스트 코드 커버리지가 낮으면 실패하도록 설정 가능하다. 이상적인 테스트 커버리지는 당연히 10..

ChoiBulldog
최불독의 머릿속