본문 바로가기
반응형

분류 전체보기
반응형
127

[Spring] SpringBoot + WebFlux + Kotlin + ReactiveMongo 프로젝트 생성 실무 개발 및 서비스를 제공함에 있어 서버에 많은 요청이 있을 경우 Tread Pool 과 Timeout 등 Spring Web의 설정을 각 상황마다 수정하곤 하였다. 이에 Spring 5부터 등장한 Reactvie 스타일 모듈인 Webflux에 대해 관심이 생기기 시작하였고 간단한 Sample Case 맛보기 정도로 진행해보려한다. 앞으로 이 토이 프로젝트에 관심 있는 여러가지 모듈 및 프로토콜 들을 더해 갈 예정이다. Project SDK로는 amazon에서 제공하는 corretto-11을 사용하였다. corretto는 OpenJDK로 Java SE 표준과 호환된다. 또한 Dependencies는 다음과 같이 설정하였다. Webflux를 MVC 모듈로 비교하자면 MVC : Controller - Se.. 2022. 5. 1.
[Kotlin] Kotlin 기초 - 02 (클래스/인터페이스) 2022.04.24 - [개발 지식/Kotlin] - [Kotlin] Kotlin 기초 -01 [Kotlin] Kotlin 기초 -01 1. 변수 선언 : var , val - var : 선언 후 수정 가능 - val: 선언 후 수정 불가능 (Java에서 final과 같은 역할을 한다.) 또한 변수타입을 지정 할 수 있다. // null인 값으로 선언 var c: Int? = null var intV.. erjuer.tistory.com 08. Class, Method Kotlin 기초 - 01 에서 class 관련하여 class 작성 및 생성자 생성까지 정리했다면 이번에는 상속 관련하여 적어보려고 한다. 08 - 1. 상속 자바 언어의 특징 중 하나인 상속은 코틀린에서도 그대로 적용 가능하다. 상속은 .. 2022. 4. 27.
[Test] Controller Test mockMvc 활용 실무 개발을 진행하면서 배포 Branch에 Merge Request를 하기 위해서는 필수적으로 Test 파일을 작성해야 했다. 많은 테스트 방법들을 배우고 있지만 그 중 API Controller 테스트 방법 중 하나인 mockMvc를 활용하게 되었고 이를 정리하려고 한다. (개발자 단위 테스트, 통합 테스트 구별할 것..) mockMvc 이란 무엇일까? Controller 테스트를 위해 서버에 애플리케이션을 배포하지 않아도 MVC 패턴 및 동작을 테스트 할 수 있는 클래스이다. 말 그대로 mockMvc MVC 패턴의 mock 형태라고 이해하면 될 것 같다. 코드로 직접 확인해보자 일단 Test 진행할 컨트롤러는 다음과 같다. @Slf4j @RestController public class APICont.. 2022. 4. 26.
[Kotlin] Kotlin 기초 -01 1. 변수 선언 : var , val - var : 선언 후 수정 가능 - val: 선언 후 수정 불가능 (Java에서 final과 같은 역할을 한다.) 또한 변수타입을 지정 할 수 있다. // null인 값으로 선언 var c: Int? = null var intValue: Int = 1234// Int var LongValue: Long = 1234L// Long var intValueByHex: Int = 0x1af // 16진수 //UTF-16 BE 인코딩 관리하므로 한글자당 2bytes var charValue: Char = 'a'// char var booleanExp: Boolean = true// Boolean var introduceStr: String = "블로그에 오신 여러분 환영합니.. 2022. 4. 24.
[Java] 함수형 인터페이스 @FunctionalInterface - 3. Function 2022.03.26 - [개발 지식/Java] - [Java] 함수형 인터페이스 @FunctionalInterface - 2. Consumer [Java] 함수형 인터페이스 @FunctionalInterface - 2. Consumer 2022.03.11 - [개발 지식/Java] - [Java] 함수형 인터페이스 @FunctionalInterface - 1. Predicate [Java] 함수형 인터페이스 @FunctionalInterface - 1. Predicate 개발을 진행하다보면 람다 표현식을 많이 쓰게.. erjuer.tistory.com 이번에는 마지막 3번째 Function 인터페이스를 정리하고자 한다. Function 인터페이스는 제네릭 형식 T를 매개변수로 받아 제네릭 형태의 R을 리.. 2022. 4. 13.
[Java] The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12] MAC 기준 maven load시 해당 내용 오류 발생시 조치방안 The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12] /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/security 디렉토리 java.security 파일 내 jdk.tls.disableAlgorithms 리스트에서 "TLSv1, TLSv1.1" 두가지 항목을 제거한다. 관리자 계정으로 편집해야 하며 nano 이용시 command + w : String find로 'jdk.tls.disableAlgorithms'을 찾는다. 2022. 3. 28.
[Java] 함수형 인터페이스 @FunctionalInterface - 2. Consumer 2022.03.11 - [개발 지식/Java] - [Java] 함수형 인터페이스 @FunctionalInterface - 1. Predicate [Java] 함수형 인터페이스 @FunctionalInterface - 1. Predicate 개발을 진행하다보면 람다 표현식을 많이 쓰게 된다. 특히 Stream API를 활용할 때 자주 쓰게 된다. 관련된 서적이나 구글에서 보면 "함수형 인터페이스를 람다 표현식을 사용할 수 있다" 라고 하는 erjuer.tistory.com 이번에는 2. Consumer 함수형 인터페이스를 한꺼번에 정리하고자 한다. 2. Consumer Comsumer는 말 그대로 소비자라는 말과 같이 Return값을 내 뱉는 것이 아닌 void를 반환하는 추상 메소드 (accept) 를 .. 2022. 3. 26.
[Java] 함수형 인터페이스 @FunctionalInterface - 1. Predicate 개발을 진행하다보면 람다 표현식을 많이 쓰게 된다. 특히 Stream API를 활용할 때 자주 쓰게 된다. 관련된 서적이나 구글에서 보면 "함수형 인터페이스를 람다 표현식을 사용할 수 있다" 라고 하는데 자바 API에서 제공하는 다양한 함수형 인터페이스가 있지만 자버 1.8부터 등장한 함수형 인터페이스 중 일부분을 살펴보고자 한다. 1. Predicate 2. Consumer 3. Function 세개로 나뉘어 진행할 생각이다. 1. Predicate Predicate 인터페이스는 test라는 추상 메서드를 정의하며 test는 제네릭 형식 T의 객체를 인수 받아 True / False를 반환한다. 라고 한다. (해당 인터페이스에 구현된 메소드의 이름은 test이지만 단순히 "boolean 형태로 리턴하는.. 2022. 3. 11.
[JPA] Entity Class의 @NoargsConstructor (access = AccessLevel.PROTECTED) 실무에서 JPA를 활용하다보면 Entity 생성시 @NoargsConstructor (access = AccessLevel.PROTECTED) 이라는 Annotation을 붙여서 개발을 하게 된다. 이에 조금 더 정확히 이해하고자 이번 블로그 글로 언급하고자 한다. 이 글을 읽는 분들은 모두 알다시피 Lombok 라이브러리에는 생성자 관련한 두개의 어노테이션이 존재한다. AllargsConstructor NoArgsConstructor 1. AllargsConstrutor 말 그대로 '모든 매개변수 생성자'인 것 처럼 해당 클래스 내의 모든 변수값을 가진 생성자를 자동으로 만들어 준다. @Setter @Getter @AllArgsConstructor public class testDto { private.. 2022. 2. 6.
[JPA] 프록시(Proxy)와 엔티티 연관 관계(LAZY, EAGER) 실무에서 조회기능을 메인으로 개발하고 있다보니 JPA 데이터 조회 최적화에 항상 관심을 가지고 있다. 특히 엔티티 설계시 엔티티간의 연관관계에 대해 중점적으로 설계하였고 이를 실무 개발에 적용하고자 하였다. 이에 해당 내용을 명확히 이해하고 적용하고자 JPA 프록시와 엔티티 연관 관계에 대해서 정리해보고자 한다. 그에 앞서 Proxy라는 것을 알아보자. 백엔드 개발자 아니 개발자 라면 Proxy Sever의 개념을 알고 있을 것이다. Proxy Server의 개념에 대해 깊이 있게 들어가게 되면 글의 길이가 길어지니 간단히간단히 이야기하자면 Proxy Server는 실 서버와 데이터의 도메인 및 IP를 외부에 오픈하기 전 중계 역할을 한다고 생각하면 된다. 예를 들자면 내가 B.com이라는 도메인으로 .. 2022. 1. 31.
[ETC] javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String 해당 오류는 Entity 클래스에서 @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="food_id") private String foodId; 에서 @GeneratedValue(strategy=GenerationType.AUTO)시 Id값에 해당하는 foodId를 String 변수로 선언해서 생기는 오류 이다. 이를 String이 아닌 다른 형식으로 바꿔 준다. ex.) String -> .. 2022. 1. 31.
Portfolio Notion으로 대체합니다. https://sweltering-fragrance-b5d.notion.site/Minsu-Park-13541d83a9b94473829fe9c378b4a159 박민수 (Minsu Park) Software Engineer sweltering-fragrance-b5d.notion.site 2022. 1. 10.
[Java] 제네릭(Generic)이 무엇일까 그리고 활용법 애플리케이션 외부 데이터를 불러오기 위해 API 호출이나 SDK 그리고 라이브러리를 사용하다보면 제네릭 클래스를 활용하는 것을 많이 볼 수 있다. 이번 포스팅은 제네릭을 활용하는 이유와 간단한 예시를 통해 이야기해보고자 한다. 자바 개발자라면 모두 알다시피 제네릭 클래스를 활용하는 이유는 다음과 같다. 메소드와 클래스의 매개변수를 나중에 확정한다. 즉 자바의 타입 안정을 보장한다. 더 자세한 부분은 코드로 이야기해보자. public class GenericEx { public static void main(String[] arg){ IntPrintGeneric intPrintGeneric = new IntPrintGeneric(400); intPrintGeneric.GenericPrint(); } sta.. 2022. 1. 9.
[Optional] orElse와 orElseGet의 차이 실무개발을 진행하면서 자주 썼지만 정확한 차이에 대해 혼동이 있던 것 중 orElse와 orElseGet의 차이에 대해 정리하고자 한다. 우선 orElse와 orElseGet는 Java 8의 Optional 도입과 함께 등장했던 메소드다. 그 전에 orElseGet를 이해하는데 필요한 Supplier interface에 대해 간단히 정리한다. Supplier Interface @FunctionalInterface public interface Supplier { /** * Gets a result. * * @return a result */ T get(); } Supplier는 넘겨준 Type T를 그대로 반환하는 함수형 인터페이스이다. 함수형 인터페이스이기 때문에 람다형식으로도 많이 쓰인다. 아래 코드.. 2021. 12. 30.
[JPA] JPA가 무엇일까 실무에서 JPA ORM을 활용하며 개발을 진행하고 있다. 야생형으로 개발을 진행하고 있는데 개발 시작 후 1년이 지난 지금 조금은 JPA에 익숙해졌다 느껴졌을 때 인프런 강의를 바탕으로 JPA를 관련 된 내용을 조금씩 정리해보려고 한다. JPA는 Java Persistence API 의 약자로 ORM(Object-relational mapping)기술을 활용하고 있다. 1. 즉 자바의 객체와 데이터베이스의 값들을 매핑하는 것이다. Mybatis는 insert into tab_erj (id, name, number) value( #{id}...) 위의 예시 mapper.xml 처럼 mapper에 ID 및 데이터 베이스 방언(쿼리)들을 사용하여 직접 데이터를 CRUD를 했다면 JPA는 @Entity @Tab.. 2021. 12. 26.
[thymeleaf] 기본 기능 정리 - 01 01, 02, 03, 04에 걸쳐 thymeleaf를 간단히 정리하고자 한다. 인프런에서 영한님의 인프런 강의를 듣고 있는데 thymeleaf 부분을 강의하신 내용이 있었다. 강의 내에서 서버 개발자더라도 SSR thymeleaf 엔진을 아는 것이 좋다고 말씀하시고 MVC 강의 첫번째 부분이 thymeleaf 내용으로 진행되는데 블로그에 해당 내용을 정리해 보고자 한다. 더 자세한 사항과 내용은 인프런 강의를 듣는걸로,, (Project 생성 및 thymeleaf 설정까지는 생략한다.) 1-1. 텍스트 - text 보통 JSP를 활용하여 서버에서 전달받은 변수값을 사용하기 위해서는 [[${message}]]"; 이런식의 변수선언을 해준다. thymeleaf에서는 다양한 표현식을 통해 이를 나타낸수 있다... 2021. 12. 16.
[Log] Apache Log4j2 취약점 발견 및 원인 어느날 인터넷 서핑을 하던중 Log4j2 취약점 발견이라는 기사를 접하게 되었다. 실무에서 사용하는 @slf4j 또한 연관이 있기 때문에 해당 내용을 자세히 알고 싶어졌고 어떤 취약점이 있는지 찾아보게 되었다. (지극히 검색을 통해 알아낸 점이라 내용에 이상이 있으면 댓글 달아 주세요...) 일단 취약점 원인을 이해하기 위해서는 몇가지를 알고 있어야 한다. JNDI LDAP 1. JNDI (Java Naming and Diretory Interface) "디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고하기 위한 자바 API이다." 라고 위키에 나와 있지만 이해가 되지 않아 구글링 해보며 결론적으로 내가 이해한 것 내용은 "DNS 서버랑 비슷하다" 였다. DNS서버가 사람이 읽을수 있는 도메인.. 2021. 12. 13.
[Intellij] 내가 사용하는 인텔리제이 단축키 (MAC) 개발을 IDE로 Intellij를 활용하고 있는데 Intellij에서 많이 사용하거나 개발 향상성에 도움이 될 법한 내용을 정리하고자 한다. 공부를 하면서 해당 내용은 업데이트 진행할 예정이다. 코드 블럭 확장 Option + ↑ 해당 코드 라인 끝 세미콜론(;) 붙이기 Command + Shift + Enter Extract/Introduce -> Introduce Variable : 해당 코드에서 변수값 자동 추출 Option + Command + V Show Context Action : 오류 나는 메서드나 변수값에 대한 Action (Mouse Hover) Option + Enter 코드 한라인 전체 복사 Command + D 코드 한라인 삭제 Command + BackSpace 코드 한라인 이동.. 2021. 12. 12.
[LeetCode] 7. Reverse Integer (JAVA) Question) Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0. Assume the environment does not allow you to store 64-bit integers (signed or unsigned). Example 1: Input: x = 123 Output: 321 Example 2: Input: x = -123 Output: -321 Example 3: Input: x = 120 Output: 21 Exampl.. 2021. 12. 11.
[LeetCode] 3. Longest Substring Without Repeating Characters (JAVA) Question 3. Given a string s, find the length of the longest substring without repeating characters. Example 1: Input: s = "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: Input: s = "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1. Example 3: Input: s = "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Notice .. 2021. 12. 11.