전체 글

개발하면서 공부한 내용들을 정리하는 곳입니다
JAVA

[Java] record 사용방법 및 예제

jdk 17 의 기능 중 record 에 대한 내용이다. record 의 쓰임새 record 는 언제 쓰는 게 좋을까 ? record 는 데이터를 저장하기위한 클래스로 생성된 인스턴스의 값을 변경할 수 없다. 그렇기 때문에, 서로 다른 계층 간 불변 데이터를 전송할 때 유용하게 쓰일 수 있으며 기본 메서드를 자동으로 생성해주어 편리하게 사용할 수 있다. 또한, 공식문서에서 확인할 수 있듯이 equals(), hashCode(), toString() 를 제공한다. record 사용방법 1. DTO with record 사용자의 입력을 저장하여 데이터를 전달하는 MemberDTO 가 있다고 하자. MemberDTO 가 사용자의 이메일, 비밀번호, 이름 필드를 가진다고 했을 때 record 로 생성한 예가 아..

Web

[Spring] XSS Prevention

이번에는 시큐어코딩을 하기위한 XSS 를 예방하는 코드에 대해서 정리를 할 것이다. XSS(Cross-site scripting) 란? XSS 는 웹 애플리케이션에서 많이 나타나는 취약점 중 하나로, 공격자가 신뢰할 수 있는 응용 프로그램이나 웹 사이트의 코드에 악성 실행 가능 스크립트를 삽입하는 공격이다. 공격자는 종종 사용자에게 악성 링크를 보내고 사용자가 링크를 클릭하도록 유도하여 XSS 공격을 시작한다. 앱이나 웹사이트에 적절한 데이터 삭제가 없는 경우 악성 링크는 공격자가 선택한 코드를 사용자 시스템에서 실행하고, 결과적으로 공격자는 사용자의 활성 세션 쿠키를 훔칠 수 있게 된다. - XSS 공격 유형 1. Reflected XSS : 악성 스크립트가 웹 애플리케이션에서 피해자의 브라우저로 반영..

Web

[Spring] Unit Tests with Mockito ( in Service Layer )

@SpringBootTest 말고 Mockito 를 사용하면 어떨까 ? Mockito 란? Mockito 는 테스트 목적으로 Mock 개체를 생성하도록 특별히 설계된 Mocking 프레임워크이다. Mocking은 단위 테스트 시 외부 종속성이 있는 경우 사용되는 프로세스로, 외부 종속성의 동작이나 상태가 아니라 테스트 중인 코드에 집중한다. 또한, 대상을 실제 개체가 아닌 Mock과 같은 모의(가짜) 개체로 대체한다. Mockito를 사용하면 Mock 개체의 기대치와 동작을 정의하여 테스트 중에 특정 시나리오를 시뮬레이션할 수 있게 된다. 이를 통해, Junit을 보완할 수 있다. 주요 장점은 아래와 같다. 1. No handwriting : 개발자들이 직접 Mock 코드를 구현할 필요가 없다. 2. A..

JAVA

[Java] stream.filter() 동작 및 예제

자바 8 이상부터 가능한 Stream 기능 중, filter에 대한 내용이다. filter() 동작 및 예제 1. .stream().filter(Predicate

OS

[OS] 스레드와 프로세스

1. Thread 와 Process 프로세스(Process)는 실행중인 프로그램이다. 예를 들어, 사용자가 메모장이라는 애플리케이션을 실행했을 때 운영 체제는 Disk에 있던 프로그램을 Memory로 가져오는데 이게 프로세스가 된다. 스레드(Thread)는 프로세스 내에서 실행되는 흐름의 단위이다. 예를 들어, 브라우저를 프로세스라고 본다면 해당 브라우저의 많은 탭들을 스레드로 볼 수 있으며 하나의 프로세스 안에는 적어도 1개이상의 스레드가 있다. 구성요소를 통해 좀 더 자세히 알아보자. 프로세스에는 적어도 하나의 스레드와 Code, Data, Files 가 있으며 각각의 스레드는 자체 Stack과 Registers 를 가진다. 즉, 메모리 영역에서 프로세스는 Code(Text), Data, Stack,..

JAVA

[Java] stream.reduce() 동작 및 예제

자바 8 이상부터 가능한 Stream 기능 중, reduce에 대한 내용이다. reduce() 동작 및 예제 1. .stream().reduce(identity value, accumulator function) public class reduceEx { public static void main(String[] args) { List numbers = List.of(1,2,3,4,5); int sum = numbers.stream() .reduce(0, reduceEx::sum); // ★ System.out.println(sum); } private static int sum(int a, int b) { return a + b; } } reduce() 는 stream의 요소를 하나의 결과값으로 반환한..

Web

[Spring] MapStruct 사용하기

사용자가 입력한 데이터가 담긴 DTO를 DB에 저장할 Entity로 바꾸기 위한, mapstruct 사용법에 대해 정리해보자. MapStruct 란 ? 프로젝트를 할 때, DTO 와 Entity 를 매핑해야하는 경우가 많은데 이러한 매핑 코드를 작성하는 것은 귀찮고 오류가 발생하기 쉽다. MapStruct 는 이를 자동화하여 작업을 단순화할 수 있게 한다. 자세한 내용은, 아래 공식 문서를 통해 확인할 수 있다. MapStruct – Java bean mappings, the easy way! Java bean mappings, the easy way! Get started Download mapstruct.org MapStruct 사용하기 1. dependency 추가 및 주의사항( Gradle ) d..

Web

[Spring] 라이브러리 버전 관리하기 ( Gradle )

Gradle로 프로젝트를 하면 build.gradle 에서 라이브러리를 관리할 수 있다. 그런데, 아래와 같이 사용하면 라이브러리가 늘어남에 따라 버전에 대한 가독성이 떨어진다. implementation과 annotationProcessor 로 scope를 구분하되 동일한 버전을 쓰는 경우도 마찬가지다. 그래서 가독성을 높이고 편리하게 사용할 수 있는 방법을 간단히 정리했다. Extra Properties 사용하기 Gradle에서 제공하는 Extra Properties를 이용하면, ext 를 통해 아래와 같이 버전을 한 곳에서 관리할 수 있다. 주의할 점은 작은 따옴표(' ')를 사용하면 ${변수명} 의 템플릿 문자열을 구성할 수 없기 때문에 큰 따옴표(" ")를 사용하도록 하자. ext { mapst..

limnj
개발을 하자