• [Spring Boot] @RequestHeader, Header의 데이터

    @RequestHeader 이란? @RequestHeader 애노테이션은 웹 request header에 바운딩 된 데이터를 나타낸다. HttpHeaders의 메서드를 통해 header의 원하는 데이터를 추출할 수 있다. Map 또는 MultiValueMap으로 메서드 인자를 설정하면 모든 header의 이름과 값을 불러올 수 있다. @GetMapping("/test") public String test(@RequestHeader HttpHeaders header) { return "header : " + header.gerFirst("Authorization") } 애노테이션에서 Key를 이용하여 데이터를 꺼낼 수도 있다. @GetMapping("/test") public String test(@Req..

  • [Spring Boot] Validation @Max 와 @Size의 차이

    1. Validation이란? Java에서 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공하여 필드에 annotation을 적용하여 제약 조건을 정의하기 위해 사용한다. Validation은 객체에 직접 정의하여 유효성 검사 로직의 문제를 해결할 수 있다. 2. Dependency 추가 implementation 'org.springframework.boot:spring-boot-starter-validation' 3. Parameter 검증하기 @Valid 애노테이션을 객체에 적용하면 유효한 객체인지 검사한다. BindingResult 객체를 통해 유효하지 않을 경우 Error를 확인할 수 있다. @Controller public class TestController { priv..

  • [Spring boot] 배포 패키징 jar 에서 war로 변경

    JSP 템플릿을 사용하여 화면 구성을 하기 위해 기존의 jar 프로젝트에서 war 프로젝트로 변경해보자. 먼저 간단하게 jar와 war의 차이점을 알아보자. 해당 프로젝트는 Gradle 기준으로 변경하였다. Jar란? 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다. JRE(JAVA Runtime Environment)만 있어도 실행 가능하다. war란? 웹 애플리케이션을 구성하는 자바 클래스, 자바 서버 페이지, 관련 XML 파일 등을 묶은 압축 파일 포맷이다. 원하는 구성을 할 수 있는 Jar와 달리 War는 WEB-INF 및 META-INF 디렉토리로 사전 ..

  • 리소스를 HTTPS 프로토콜 호출로 인한 ERR_SSL_PROTOCOL_ERROR 발생, Mixed Content

    1. 문제 사항 테스트 서버에 애플리케이션을 실행 환경을 구축하기 위해 도커로 nginx와 tomcat을 띄웠다. 테스트 서버는 사내IP에서만 접근이 가능하여 SSL인증이 따로 필요하지 않았다. 프론트에서 css, image 등 외부나 내부 API 호출할 때, 프로토콜이 HTTPS로 호출되어 ERR_SSL_PROTOCOL_ERROR가 발생하며 리소스들이 가져오지 않는 현상이 발생했다. 2. 원인 웹 & 모바일 환경을 고려한 소스 코드 작성으로 모바일 테스트 서버에서는 HTTPS를 적용한 상태로 Mixed content, 혼합콘텐츠로 인해 HTTPS로 요청을 보내기 위해 프론트 코드에 추가한 META태그가 원인이였다. 3. 해결 해당 지식이 없어서 삽질을 많이했다. Nginx에서 리버스 프록시 설정에서 p..

  • SOLID

    SOLID SRP, OCP, LSP, ISP, DIP의 약자 로버트 마틴이 정리한 객체지향 프로그래밍 및 설계의 소프트웨어 개발 원칙을 의미한다. SOLID 원칙을 따르면 코드를 확장하고 유지보수 하기 좋아진다. SRP Single Responsibility Principle의 약자 단일 책임의 원칙 하나의 객체는 하나의 책임만 가져야 한다. 응집도는 높게 결합도는 낮게 설계해야한다. 객체가 단 하나의 일만 한다면 시스템 수정 시 영향을 최소화 할 수 있다. OCP Open-Closed Principle의 약자 개방 폐쇠의 원칙 확장에는 개방적, 변경에는 폐쇠적이여야 한다. 새로운 기능이 추가 될 때, 새로운 코드가 추가되면 기존의 코드에 변경이 발생하지 않도록 설계해야한다. LSP Liskov Subs..

  • 독서 : 당신의 인생이 왜 힘들지 않아야 한다고 생각하십니까 쇼펜하우어 아포리즘

    독서 : 당신의 인생이 왜 힘들지 않아야 한다고 생각하십니까 쇼펜하우어 아포리즘

    성공에 관한 내용을 다루는 유튜버가 쇼펜하우어의 글을 소개하는 영상을 우연히 보게되었다. 그 이야기에 매료되어 요즘 그 유튜버가 들려주는 이야기들을 재밌게 듣고 있다. 문득 이 분이 강조하는 쇼펜하우어라는 철학자에 대해 궁금해졌다. 마침 사내 도서로 "당신의 인생이 왜 힘들지 않아야 한다고 생각하십니까"가 있어 읽어 볼 기회를 얻었다. 출퇴근 시간을 활용해 보기 시작하였는데 내용이 너무나 흥미로워 출퇴근 시간이 기다려질 정도였다. 한번은 카페에서 읽기도 했지만 30분동안의 출근길 또는 퇴근길에 읽는 순간이 너무나 알차고 즐거웠다. 세상을 비판적으로 바라보는 것 같은 느낌을 주지만 객관적인 사실과 현실을 깨달을 수 있는 시각을 선사해 주었다. 그런 메세지가 더욱 하루를 허투루 보내면 안될것 같은 하루가 엄..

  • CSP, MSP

    CSP, MSP

    CSP Cloud Service Provider의 약자 클라우스 서비스를 제공하는 업체를 의미한다. 유명한 CSP는 AWS, GCP, Azure, NCP 가 있다. MSP Managed Service Provider의 약자 클라우스 인프라 관리 서비스를 제공하는 업체를 의미한다. 클라우드 전환 및 구축, 설계, 운영 서비스 등을 제공하며 컨설팅 해주는 역할을 한다.

  • CIDR, 클래스 기반 IP주소

    CIDR Classless Inter-Domain Routing의 약자 IP 주소 할당 방법이다. 인터넷상에서 디바이스 간 IP주소를 사용하여 서로 통신한다. CIDR은 네트워크에 유연하고 효율적으로 IP 주소를 할당한다. CIDR은 서브넷 마스크로 네트워크 부분과 호스트 부분을 구분할 수 있게 하였다. 서브넷 마스크는 1이 연속되어 있어야 한다. CIDR 표기법 192.168.10.0/32 서브넷 마스크 255 . 255 . 255 . 0 IP 주소 192 . 168 . 10 . 0 네트워크 부분 호스트 부분 클래스 기반 IP 주소 네트워크 영역과 호스트 영역을 나누어 IP주소를 할당한다. 네트워크 주소는 호스트의 집합 주소이고 호스트 주소는 하나의 네트워크 내에 호스트를 구분하기 위한 주소이다. A ..