가장 먼저 코드로 본 web 요청 인터페이스는 WebClient였고, 명확하고 직관적이여서 자주 썼다. 그런데 현재 프로젝트에서는 RestTemplate과 WebClient가 혼재되어있어서, 이 둘에 대해서 조금 알아볼까 한다. 뭐가 더 먼저 나왔을까 : RestTemplate WebClient vs RestTemplate으로 치면 스택오버플로우 글 하나가
SpringJava서비스를 만들 때 DTO 를 List로 내려주는 것이 아니라, 항상 특정한 형태로 내려준다. 바로 DataResponse 형태 이 DataResponse class는, paging을 위해서 만들어진 커스텀 클래스인데 🙂 항상 DataResponse<T 의 형식으로 사용한다. 이와 같이, T 를 품고 있는 클래스의 타입을 일반적으로 지칭할 때Paramete
JavaJava , 그리고 T 메모리 메모리에서 스태틱 영역은 클래스들, 스택은 메소드들, 힙은 객체들의 놀이터다. memory memory2 멀티스레드와 멀티프로세스 멀티 스레드의 T 메모리 모델은 스택 영역을 스레드 개수 만큼 분할해서 사용하는 것이다. multithread 멀티 프로세스는 다수의 데이터저장 영역 를 갖는 구조다. multiprocess 그러니
JavaEffective Java 2E 78개의 규칙들 2장 객체의 생성과 삭제 규칙 2 생성자 인자가 많을 때는 Builder 패턴을 고려해라 Static Factory 패턴과 생성자는 선택적 인자가 많은 상황에 도입하기가 어렵다. 기존 패턴들 점층적 생성자 패턴 : 필수인자를 갖는 생성자를 정의하고, 선택적 인자 1개를 갖는 생성자, 2개를 갖는 생성자 등을
Java애스팩트 지향 스프링 소프트웨어 시스템의 기능이 애플리케이션의 여러 곳에 적용되어야하는 경우, 적용 부분마다 이 기능을 호출하는 일은 그다지 바람직하지 않다. 로깅, 보안 트랙잭션 관리 같은 기능은 대부분의 애플리케이션에서 공통적으로 나타나지만 그렇다고 해서 해당 애플리케이션 객체들이 적극적으로 처리해야할 기능은 아니다. 이런 기능을 가리켜 횡단 관심사 라
SpringJavaAOP규칙 1 생성자 대신 static Factory 메소드 사용을 고려하자. 일반적으로 인스턴스를 생성할 때는 생성자를 사용합니다. 다만 다른 사람들도 유용하게 사용할 하도록 하는 방법은 바로 public static 팩토리 메소드 를 두는 것입니다. public static 팩토리 메소드는 다음과 같이 해당 클래스의 인스턴스를 하나 생성하여 반환하는 방식입니
JavaSpringEffective javaclean code객체를 바이트 스트림으로 인코딩 하는 것을 직렬화 이라고 하고, 역으로 바이트 스트림을 객체로 디코딩 하는 것 을 역직렬화 이라고 한다. 직선으로 쭉 열을 세우니까 직렬화다 왜 사용? 1. 원격 통신 상에서 이점을 얻기 위해서 2. 자바 직렬화는 자바 시스템에서 개발에 최적화되어 있습니다. 복잡한 데이터 구조의 클래스의 객체라도 직렬화 기본 조건만 지키면 큰
SerializableJavaSpring을 공부하던 중에, 멘토님께서 JPA의 중요성을 강조해주셨습니다. Django 는 ORM 으로 간단하게 DB를 다루고 쓸 수 있었는데, Spring에서는 어떤 식으로 DB에 접근하고 데이터를 읽어오는 지 궁금해졌습니다. 설마 학교에서 하던 것 처럼 현업에서 직접 DB에 커넥션 맺고 길고 긴 코드로 가져오는 건 아닐테니 말입니다. 🤨 이 포스트에
JPAJavaSpring-boot 를 intelliJ에서 사용하면, 설정 시에 Actuator 를 사용할 수 있습니다. actuator는 스프링 부트 어플리케이션의 상태를 편리하게 확인할 수 있는 도구이지만, 그렇기 때문에 실 서비스에서는 공격 등을 대비하여 막아두어야하는 도구이기도 합니다. 오늘은 간단하게 actuator 의 명령어와, 실 배포 대비 방법을 알아봅니다
SpringLibraryJava단위테스트는 뭔가요? 외부에 의존성이 없는 소프트웨어 단위의 테스트. 단위테스트는 빨라야한다. Working Efficiently with Legacy Code 의 저자는 테스트 실행시간이 0.1초가 넘어가면 단위테스트가 아니라고 말했다. BDD Behavior Driven Development - Given : 조건. ~가 주어졌을 때 - When: ~를
TestSpringJavaGeneric 개념을 제대로 정의하지 않고 넘어가니 계속해서 의문점이 생기는 경우가 늘어난다. ArrayList<String 으로만 접한 Generic을 좀더 잘 정의해보도록 한다. Generic 일반적인 자료형이라고 하면, 우리는 int, double, String 등의 기본 데이터 타입부터 생각하게 된다. 제네릭이란, 이런 데이터 타입을 아직 명시하지
GenericJava별것아닌거 같은데 삽질을 했던게 바로 어제다. redirect_uri 를 인코딩해서 내리는 게 금방 될 줄 알았는데 삽질 과정을 정리해본다. 결론: Spring-Java에서 URL 뜯고 자원별로 뜯을 거면 URLComponentBuilder 쓰세요 첫번째 삽질 - split로 query를 다 뜯어? java https://access.line.me/oaut
Java같은 실수를 반복하는 멍청이는 되지말자는 의미에서ㅎㅎ PR을 쭉 보면서 받은 코드리뷰를 정리해보았습니다. 여러 번 반복해서 나오는 리뷰도 있네요. 스프링은 여태까지 했던 것 중에 제일 감을 못잡겠어서, 다른분들의 코드를 보면서 이해하고 있는데 리뷰를 받으면서 틀린 거 짚어주시니까 너무 기분이 좋고 호호 1 환경설정에 정보 추가 상황 모든 환경에 공통으로 쓰
JavaCode Review자바 학교에서도 지속적으로 배우는 가장 익숙한 프로그래밍 언어 중 하나이다. 졸업때까지 만 해도 학부에서 파이썬이나 go 같은 트렌디한 언어가 아니라 자바를 한다고 하면 ??? 하고 바라보고, 고루한 언어처럼 여겨지기도 했다. 자바를 제대로 처음 배울 때는 2014년이었는데, 사실 이때 Java8이 릴리즈됐다. 그러나 그때의 자바 강의는 자바의 OOP 로서
JavaLambda??: 준영님 이 Date 무슨 형식으 로 보내야해요? 그동안은 date는 무조건 서버에서 만들어서 넣어주는 것이어서 몰랐는데, date를 클라이언트 에서 받을 일이 생겼다. DTO에는 해당 필드 가 ZonedDateTime인 건 알았는데, json 에서 어떻게 보내야하지? String 으로 말고.. 이러던 와중에 최근에 LocalDateTime DTO 변환
Java상황 기존에 통합테스트로 돌고 있던 web client 테스트가 있다. 외부 API를 찔러보는 테스트인데, 이에 필요한 파라미터는 해당 web client 내부에서 가져오는 방식이다. 이때 무거운 통합테스트가 아니라, 직접 파라미터를 set해주는 가벼운 단위 테스트를 만들고 싶다. 기존 통합테스트 java @SpringBootTest public class
JavaSpringDTO DTO 는 클라이언트와 데이터를 교환하기 위해서 형식을 정해놓은 것이다. 예를 들어 화면에 상품과 그에 대한 리뷰가 같이 필요하다면, java @Data @Accessor public class Home { private Long id; private Product product; private Review review; } 와 같이 여러개를 감싸서
SpringAnnotationJava상황 어떤 값이 유효한지 검사를 해야 하는데, 해당 값은 entity나 DTO에서 받을 때 매번 유효성 검사를 해야한다. 이런 경우 대개 Validator를 사용해야하는데, Validator와 Annotation을 함께 사용하여 깔쌈하게 만드는 법을 알아본다. Annotation은 뭐더라 Annotation 어노테이션 주석이라는 뜻, 보통 생각하는 // /
JavaSpringAnnotation이전에 내가 처음으로 받은 받은 JAVA 코드리뷰 모음 이라는 제목으로 글을 올렸었는데, 그 이후에도 이건 꾸준히 하면 좋겠다 라는 생각이 들어서 또 다시 적습니다. 2월에는 Vue 공부도 조금했는데, Java 코드리뷰가 아닌 관계로 제외되었더니 양이 적네요. 보안이슈로 이전 API Deprecated - 나중에 없앨 계획이시면 @deprecated 붙여
JavaCode Review영속성 컨텍스트 JPA를 사용하고 테스트를 짜다보면 영속성 컨텍스트를 몰라서 오류를 겪게되는 일이 생긴다. 그래서 한번은 짚고 넘어가야겠다는 생각에 참고글을 나름대로 정리해보았다. 정의 영속성 컨텍스트는 엔티티를 저장하는 환경이다. 엔티티 하나하나를 식별자 값로 구한다. 이 컨 텍스트는 EntityManager 객체 당 하나가 만들어진다. 위 그림에서의 메소
JPAJava테스트를 8개 정도밖에 만들지 못했지만, 일단 원하는 바에 부합하는 정규식인 듯 하여 블로그에 작성해 둡니다. regex ^://)??\.a-z+? http나 https로 시작하는 경우에는 ://가 반드시 붙는다. Optional. www. 로 시작하는 경우가 있다. Optional. 알파벳 혹은 숫자를 포함한 문자열이 반드시 1개 이상 있다. 이후에 .
JavaRegexHEAD FIRST DESIGN PATTERN 을 정리합니다. 02 옵저버 패턴보기 01 디자인 패턴 소개 , 그리고 스트레티지 패턴 상속의 문제점 - 서브 클래스에서 코드가 중복된다 - 모든 서브클래스의 행동을 알기가 어렵다 - 코드를 변경했을 때 원치 않는 서브클래스들에게 영향을 끼칠 수 있다 Duck 예제 Duck 종류를 총괄하는 Duck 클래스가 있
DesignPatternJavaTIL 는 매일 매일 배운 점을 적는 것인데요. 매일 매일 무언가를 지속해나간다는 건 참으로 힘든 일이네요. 그래도 다달이 하나쯤 공유하는 건 어렵지 않을 테니, 열심히 정리해보려고 합니다. DTO 만들 때 annotation 팁 필드 하나만 바꿔야 하면 JsonProperty, 클래스 레벨에서 전략을 적용해서 일괄로 바꾸려면 JsonNaming, 애플리케
JavaCode Review이번에 외부 시스템과 연동을 진행하면서, 인증을 HMAC Signature로 하게 되었는데요. HMAC이 가물가물해서 =) HMAC에 대한 간략한 소개와, Spring에서 어떻게 requestBody를 받아와서 HMAC Signature로 만드는지 샘플코드를 적어봅니다. HMAC? SHA-256? 이게 다 뭐야 😭 HMAC은 해싱기법을 이용해서 메시지의
JavaAuth과거에 썼던 dev 지식 모음을 보다가 아직 업로드하지 않은 것이 있어서 올립니다. Exception의 이해에 꽤 도움이 되었어서, 원문을 보시면 더 좋을 것 같습니다. Exception Handling in Java: A Complete Guide with Best and Worst Practices 위 문서를 요약, 번역하고 합니다. 필요한 경우 다른
Java서론 최근 성능테스 트를 하면서, minor-gc 와 major gc 에 대해서 다시 한번 볼 기회가 있었다. 하다보니 조금씩 모자란 지식을 채워야겠다는 생각이 들어 적어보는 jvm, memory. 참고한 기준 문서는 java SE 8 로 한다. 벌써 10년 전이지만 여전히 유효하므로 🥲 JVM, JRE, JDK <스프링 입문을 위한 자바 객체 지향의
JavaJVM인텔리제이 사용하며 마주한 문제들을 정리합니다. Tool Windows Bars 가 이상하게 생겼어요. 아래와 같이 하단에 잘 나오던 tool windows bars original 갑자기 아이콘만 크게 보이거나, 사라진다면 material-applied 아래 옵션이 켜져있을 확률이 있다. tab 두번을 눌러 아래 액션을 검색하고, 스위치를 종료하자. ./
Javacharles 는 한번도 써보지 않았고, 받아서 쓰는 것도 귀찮아서 다시 mitmproxy 를 깔았다. 아웃사이더님의 블로그가 아주 충분했는데 오늘 다시 들어가보니 이미지가 깨지는게 몇개 있어 🥲 직접 이미지를 첨부해보기로 ㅎㅎ 설치 & 설정 macOS 에서의 설정 bash brew install mitmproxy 실행 bash mitmproxy 아이폰
Java서론 서비스 모니터링 하다가, 일부 특수문자가 제대로 표현되지 않는 영역이 있는걸 발견했다. html 특수문자 형태 그대로 나온 것인데, 예를 들어, < 가 < 와 같은 형태로 그대로 나왔다. 특수문자는 html 상에서 위와 같은 형태로 표현될 때가 있다. 자주 쓰는 것 중 하나인 공백 도 이런 방식으로 표현되고. 이 리스트는 여기 를 참고하면 알 수
JavaSecurity서론 roadmap 을 보면서, 내가 아는 것도 어렴풋이 알고 있고 모르는 건 아주 화끈하게 모른다는 점을 알게 되었다. 머릿속에 정리가 안되는 찜찜한 상태로 있기 보다는, 일단 위키를 만들어서 써내려가기로 했다. 최대한 2-3줄 안에 정리하는게 목적인데 잘 될지는 😮 상세한 설명을 한 나의 블로그 글이 있으면 첨부한다. CS 기본 지식 관련 질문 OSI
JavaServerCS서론 갑자기 애플리케이션이 죽었다. 🤔 Port Down 이길래 내가 모르는 배포가 있었던가 했더니 아니었다. 1) 애플리케이션 로그를 봤다. 일정 시간대 이후로 끊어진 것을 제외하고는 특이사항이 없었다. 2) 서버 CPU, I/O 등 지표를 봤다. 갑자기 과다한 요청이 들어오거나 끊긴일도 없었다. 애플리케이션이 죽은 뒤에 CPU 계산량이나 disk I/
JVMJavalog4j 취약점 문제 후술 예정 sonarqube fix sonarqube 측에서는 큰 문제는 없다고 생각하지만, 혹시 모르니 옵션을 넣으면 좋겠다는 정도로 제안했다. https://community.sonarsource.com/t/sonarqube-and-the-log4j-vulnerability/54721 - sonar.properties에 업데이트
JavaLoggingSecurity서론 너무 모르는게 많아서 한두줄로 요약하는 문서 참고 문서로 백엔드 로드맵을 첨부하려고한다. backend roadmap 출처는 https://roadmap.sh/roadmaps/backend.png 최근A에 geeknews 를 다시 돌려보다가 좋은 레퍼런스를 찾았다. 신입 개발자 커리큘럼. - 데브옵스 https://github.com/Knowre-De
Java원하는 jar 다운로드 하기 - maven central 에 올라가지 않은 jar - 버전업이 필요없는 jar - 더이상 지원하지 않는 jar 인 경우 jar 파일 라이브러리를 직접 임포트해줄 일이 발생한다. 경로는 원하는 모듈의 src 와 같은 계위에 libs 폴더 을 만들고 그 하위에 넣어준다. tree jar libs 로 만들 기 Project Stru
Java서론 글또 이전에 하고 있던 모던 자바인 액션 스터디가 종료되고, 글또가 종료되었다. 글또는 주기적으로 블로그 글 발행을 목표로 함께 달리는 그룹이다. 좀더 자세한 정보를 원한다면 글또 4기 후기 를 참고하자. 그런데 기술 블로그를 작성하려면 공부를 해야하기때문에, 글또 자체가 공부 장려로 효과가 상당히 좋았다. 벼락치기라도 2주마다 하면 꾸준함이 되는게
Java