Til

👨🏻‍💻 Development/🍃 Spring Boot

JPA - Attribute Converter

중고 게시글 상태가 (판매중, 예약중, 판매완료, 숨김) 4가지로 나타낼 수 있는데 Database에서는 integer형태로 저장하여 효율을 높이고, Spring에서는 숫자에 따른 Enum type으로 관리한다면 얼마나 좋을까? Database에서는 Enum type으로 저장한다면, 효율측면과 유지보수 측면에서 알 수 없는 오류가 나기 쉽상이다. (Enum.value vs Enum Ordinary) 그래서 JPA에서는 중간에 추상화 객체를 두어 변환이 매우 쉽게 될 수 있도록 기능을 제공한다. Entity & Enum // entity @NoArgsConstructor @Getter @Entity(name = "posts") @DynamicUpdate @Builder public class Post ex..

👨🏻‍💻 Development/🤯 SoftSkills

IntelliJ를 JIRA와 연동해서 사용

참고 IntelliJ를 JIRA와 연동해서 사용하기 JIRA를 사용하다보면 key값이 보인다. 이 key값을 이용하면 github와 연동을 쉽게 할 수 있다. 연동 설정 Atlassian(JIRA) API 토큰 생성 계정 설정 → 보안 탭 → API 토큰 만들기 및 관리 Intellij에 JIRA 연동 IntelliJ → Preferences → Tools → Tasks → Servers + 버튼을 누르고 JIRA 선택 url 및 email, 발급 받은 API Token 넣고 OK 버튼 누르기. test해보고 연동이 완료되면 좋습니다. 👏🏻👏🏻👏🏻 JIRA 업무들을 IntelliJ 로 가져오자. Mac OS 기준으로 option+shift+n 을 사용하시면 아래와 같이 본인에게 할당된 티켓 목록을 볼 수..

👨🏻‍💻 Development/🗂 etc

[Network] ssh 키인증 방식

SSH는 대칭키 방식과 비대칭키 방식을 모두 사용하여 인증과 암호화를 진행. 암호화 방식의 종류 대칭키 방식 동일 키 값으로 암호화 복호화 비대칭키 방식 암호화와 복호화를 서로 다른 키를 사용하는 방식 aws에 ec2 서버를 만들고 private key (mykey.cer)를 받았다. 서버 인증 과정 클라이언트에서 ssh -i mykey.cer ec2-user@123.123.123 명령어를 통해 접속 시도 공개키를 받을지 묻는 메세지 나오면 yes -> 클라이언트 pc의 .ssh/knwon_hosts 파일에 공개키 저장됨. 클라이언트는 난수값을 발생시키고 난수값에 대한 해시값 생성해 저장함. 난수값을 공개키로 암호화하여 서버에 전송함. 서버에서는 암호화된 데이터를 비밀키로 복호화한 후 난수값을 알아낸다...

👨🏻‍💻 Development/🧩 OOP

instanceof 연산자와 LSP(리스코프 치환 원칙)

LSP LSP는 OCP(개방폐쇄원칙)을 받쳐주는 다형성에 관한 원칙을 제공한다. 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다. instanceof 그래서 instanceof 연산자는 타입을 확인하는 기능을 사용하기 때문에 LSP 원칙이 깨지는 주요 현상이다. Example before) public class Order { public int calcuateDiscountAmount(Item item) { if (item instanceof Food) // LSP 위반 return 0; return item.getPrice() * discountRate; } } after) public class Item { public boolean isDi..

👨🏻‍💻 Development/☕️ Java

JUnit의 @BeforeClass 와 static block {}

Static Initializer (static block{}}는 JUnit이 아닌 JVM에 의해 호출 된다. 만약 예외가 static initializer 내부에서 발생된다면 테스트 프레임워크는 예외를 처리하고 보고하는 작업을 못 한다. 더 나아가 static initializer의 호출 시간은 @BeforeClass 메서드와 비교하여 잘 정의되지 않는다. static initializer는 정적 속성, 정적 메서드 또는 생성자 중 하나의 접근과 같은 첫 번째 실제 사용 시 클래스 로더당 한 번만 실행된다. 때론 이게 언제가 될지 가늠하기 어려울 때가 있다. (그래서 static initializer는 미래에 복잡한 버그를 야기할 수 있다.) 반면에 @BeforeClass는 각 클래스의 테스트 코드가 ..

👨🏻‍💻 Development/𝐀 Algorithm

2021년 09월 17일 TIL - 플로이드 와샬 알고리즘 (Java)

문제풀다가 모든 점에 대한 최단경로를 구해야하는 문제를 풀다가 플로이드 와샬을 떠올랐지만 알고리즘을 까먹엇다. (대충 3중 for문 이라는 것 정도..) 특징 다익스트라 알고리즘은 하나의 정점에서 출발했을 때 다른 모든 정점으로의 최단 경로를 구하는 알고리즘. 플로이드 와샬 알고리즘은 모든 정점에서 모든 정점으로의 최단 경로를 구하는 알고리즘. 3중 for 문 (제일 밖) 첫 번째 for 문: 거쳐가는 노드 두 번째 for 문 : 출발 노드 세 번째 for 문 : 도착 노드 검증 출발→거쳐 + 거쳐→도착 가 출발→도착 보다 더 짧으면? 출발→도착 갱신. Code for(int k = 0; k < number ; k++) { for(int i = 0; i < number ; i++) { for(int j ..

👨🏻‍💻 Development/☕️ Java

2021년 09월 16일 TIL - Mocking Static Method

배경 & 문제점 바우처 관리 프로그램을 JAVA Spring 프레임워크로 구현하다가 Test Code 작성 중에 난관에 부딪혔다. VoucherService 테스트 코드를 작성하는데 Mockito 라이브러리를 이용해서 행위에 대한 테스트를 구현한다. class VoucherServiceTest { @Test @DisplayName("voucher가 생성되어야 한다.") void testCreateVoucher() { // ... } } Voucher Class를 만드는 VoucherFactory 클래스의 method인 createVoucher() 가 정해진 인스턴스(fixedAmountVoucher)를 반환하도록 mocking하려고 한다. // VocherFactory.class public class ..

황일용
'Til' 태그의 글 목록