JAVA

JAVA/SPRING

[Spring] Spring Security setting과 에러 사항 수정 과정 기록과 OAuth2

Security docs : Spring Security Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authoriz spring.io 🍺 이거 왜 ? 프로젝트 진행 중 특정 API를 외부에서 쓸 수 있도록 인증과정을 제거해달라는 요청이 있었고, 제거 후 프로젝트를 스테이지 서버에서 기동 -> API는 자유롭게 ..

JAVA/SPRING

[Spring] @Valid , @Validated, BindingResult

미리 보기 페이지를 테스트 하는 도중 의문이 생겼다. @Valid 로 DTO 객체의 유효성 검증을 하고 BindingResult 를 통해 에러를 리턴하는 이유는 뭘까? 우선 선언은 각각 다음과 같다. import org.springframework.validation.BindingResult; import javax.validation.Valid; Spring에서 제공하는 BindingResult 와 달리 Valid는 자바에서 제공한다. BindingResult : 스프링 공식문서의 설명에 따르면, 바인딩 결과를 나타내는 것으로, Errors 오류 등록인터페이스를 확장하고, @validator 를 적용할 수 있도록 한다고 한다. * 즉 오류를 확장하는 목적이다. @Valid : ( spring boot ..

JAVA

[JAVA] compareTo

[가장 큰 수] 라는 정렬 알고리즘 문제를 풀다가 접했다. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 직접 정렬을 하는 방식으로 풀려고 했지만 시간 초과가 계속 발생했다. 문제의 해결책은 compareTo 라는 함수를 사용하는 방식. + 이어진 두 수의 크기를 비교하는 방법이 핵심아이디어이다. 🍺 java.util.Comparator 클래스에 있는 하위 메서드 compareTo 이다. // 문자형(대소문자구분) StrA.compareTo(StrB); A != B -> return 다른 문자 개수; 동일한 문자로 시작 하지 않을 경우 + 중간은 같은 문..

JAVA

[JAVA] JSP와 서버사이드렌더링(SSR)

🍅 회사에서 기존 신규 프로젝트를 진행 할 때에 어떤 방식으로 개발할 지에 대해 잠깐 이야기 한 적이 있다. 단순히 JSP를 개발 속도가 빨라서, 개발에 익숙하니까. 기존에 했던 프로젝트와 비슷한 구조로 간다면 구현이 빠르니까. 라는 말에 납득을 하긴했지만, 한편으로는 레거시한 방법을 쓰는게 싫다라는 막연한 생각이 있었다. 그 외에는, 코틀린을 써보자 리액트로 나누자. 등등 여러 의견이 있었다. 러닝커브를 의식하지 않고, 결정만 내린다고 한다면. 왜 레거시를 싫어하는지? 왜 JSP가 레거시라는 인식을 가졌는 지, 생각해봤지만, 이유는 모르고 그냥 잘 안쓰니까, 요즘 안쓰기도 하고, 그냥 프론트 백 분리가 추세니까라는 이유만 생각이 났었다. 나는 왜 JSP에 거부감을 가졌는지 장단점을 파악해서 이유를 알아..

JAVA

[Java] TDD와 예제와 연습 , querydsl 슬라이싱 테스트 설정

🦐 TDD를 처음 접한것은 채용 공고에서였다. 우대사항에는 TDD를 쓴다는 얘기가 상당히 자주 보였다. 최근 TDD는 죽었다라는 자동완성이 보이는 것을 보면 TDD에 대한 회의감이 드는 개발자가 많아 보인다. 왜 유행했는 지, 비판받는 지, 궁금하니까 직접 해본다. TDD ? TDD(Test Driven Development) 소프트웨어 개발 방법 중 하나로, 테스트를 먼저 작성하고 이를 통과하기 위한 코드를 작성하는 것. 소프트웨어 개발 프로세스를 효율적이고 안정적으로 만들며, 품질을 높이는 데에 기여한다. 절차는 다음과 같다. 1.테스트 작성 먼저 테스트 케이스를 작성한다. 이때 테스트는 실패하는 것을 기대한다. 테스트 케이스는 코드 작성 전에 미리 작성되며, 명확하고 간결한 요구사항을 가지고 있어야..

JAVA/SPRING

[Spring] Spring / Spring boot 특징 간단 정리.

JDK 17 을 서포트하는 spring 6.0대 버전이 등장했고, Spring Boot 3.0 도 java 17을 최소 버전으로 요구하기 시작했다. LTS 버전이 java 11 이후 17 버전으로 확장 되었다. Java 17에서는 많은 기능이 추가되고 향상되었지만, 현재 쓰는 11버전 이후에 추가된 (개인적으로 써보고 싶은) 기능들은 다음과 같다. 텍스트 블록 기능. 향상된 Switch 문 및 패턴 매칭 기능. Record 불변 객체 타입 ( Lombok 의 value) 프로퍼티 포함 생성자 private final 적용 getter 메소드 생성 toString, equals, hashcode method 생성 annotation울 붙이도록 허용. Sealed class 허용된 (permits) 클래스 ..

JAVA

[JAVA] Gabage Collection

→ 가비지 컬렉터(GC) 애플리케이션의 동적 메모리 할당 요청을 자동으로 관리한다. 운영 체제에서 메모리를 할당하고 반환. 애플리케이션이 요청할 때 해당 메모리를 애플리케이션에 전달. 응용 프로그램에서 아직 사용 중인 메모리 부분을 확인. 애플리케이션에서 재사용할 수 있도록 사용하지 않은 메모리를 회수. JAVA는 프로그램 코드에서 메모리를 지정하거나 해제하지 않는다. 객체를 Null로 지정하는 것은 상관없지만, System.gc()메서드를 호출하는 것은 시스템의 성능에 매우 큰 영향을 끼친다. * System.gc() 메서드는 가비지를 탐색 및 정리하는 작업이고 상당히 무거운 작업이다. 공식 문서에 따르면 대부분의 VM 종료시까지 유지되는 초기화 시 할당된 객체 외에는 위의 그림과 같은 그래프에 해당한..

JAVA/SPRING

[NAVER maps 길 찾기] springboot + webClient 로 API 호출

spring boot / java 11 / react client 🥨 개인 프로젝트에서 naver 길찾기 api를 사용한 과정을 적어두려한다. 🥪 공식 문서를 보는 것이 가장 정확하므로 공식문서를 참고하는게 제일 베스트이다. 🍶 설정부터 API 요청까지, API 요청에서 response data를 받아오기까지 정리하려 한다. 🍫 길찾기 API는 우선 네이버 클라우드 플랫폼에서 서비스 사용을 위한 등록이 먼저 되어야 한다. https://console.ncloud.com **** 서비스 등록은 생략 🍿 인증을 위한 키값이므로, 유출되지 않도록 조심해야 한다. ** 등록이 되었다면 실제 API를 요청해야 하는데 처음 시도 할 때에 클라이언트에서 직접 요청한 값을 쓰려 했으나, 현재는 JS 요청을 NAVER ..

JAVA

java directory copy / progress bar

😒 test용으로 구현 java 1.8 사용 😒 에이전트의 FS 기능 개발 중 필요해서 구현. 특정 디렉토리 경로 및 모든 하위 파일을 file output stream으로 쓰면서 소스와 타겟의 바이트단위 크기를 비교한다. 재귀호출을 통해 디렉토리안의 디렉토리도 모두 확인하도록 구현. 1. static 변수를 통해 진행률 등 기록하는 방식. 2. static 변수 없이, 파라미터로 처리하는 방식. 멀티 스레드 환경에서 전역변수를 참조하면 전역변수의 값이 꼬이므로, 2번의 방식이 적합함. FileDownloaderTest.java package test; import com.gemiso.ariel.common.util.FileUtil; import java.io.*; public class FsCopyDi..

JAVA/SPRING

springBoot / mapstruct

🍟 dto entity 변환 시, mapstruct 라이브러리를 사용하는 방법이 있다. 세팅 : build.gradle dependencies { //MapStruct annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' implementation 'org.mapstruct:mapstruct:1.4.2.Final' } mapper * UserMapper로 구현함. package com.org.walk.user; import com.org.walk.util.EntityMapper; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @Mapper public interfa..

girin_dev
'JAVA' 카테고리의 글 목록