본문 바로가기

Java23

[Java] DTO를 Record로 만드는 이유 Record // 레코드 선언법 public record 레코드명(컴포넌트1, 컴포넌트2, ...) { } 값의 집합으로 이루어진 간단한 객체를 심플하게 개발하기위해 고안되었으며, immutable data(불변데이터)를 다룰 class 구현에 최적화되어있습니다. 따라서 웹서비스 구현에서 많이 사용되는 DTO 개념에 적용하면 유용합니다. 생성자, accessors(getter), equals(), hashCode(), toString() 등 DTO 특성의 클래스를 개발할때 매번 개발자가 직접 구현해주어야 했던 반복적인 작업이 줄어듭니다. 또한, "이 클래스는 data carrier 용도이다"를 명시적으로 나타낼 수 있으므로 코드에 대한 이해를 돕고 해당 클래스의 목적에 맞지 않는 구현을 하지 않도록 방지.. 2024. 4. 17.
[Java] Lombok Lombok Lombok이란 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리입니다. Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있습니다. 예를 들어 객체에서 생성자도 필요하고, toString 함수도 Override 해야하는 등 추가적인 작업이 필요하다면 1개의 VO 클래스만 해도 상당히 길어지고, 코드의 가독성은 떨어지는 등의 단점이 있습니다. 하지만 Lombok을 적용한다면 아래와 같이 단순화시킬 수 있습니다. // Lombok 적용 전 public class User { private String useuId; // 유저ID private String password; // 비밀번호 // 생략 public St.. 2024. 3. 10.
[JPA] findById와 getReferenceById 🏷️ 데이터를 가져오는 방식 ✅ findById Optional findById(ID id) ▪️ Optional: 조회된 엔티티를 Optional로 감싼 반환 타입입니다. Optional은 엔티티가 존재하지 않을 수도 있는 경우에 사용됩니다. ▪️ ID: 조회할 엔티티의 식별자(ID) 타입입니다. ▪️ 조회된 엔티티 객체를 Optional로 감싸서 반환합니다. ▪️ CrudRepository와 JpaRepository 인터페이스에서 모두 제공되는 메소드입니다 ✅ getReferenceById public T getReferenceById(ID id) ▪️ T: 반환 타입으로 엔티티의 클래스 타입입니다. ▪️ ID: 조회할 엔티티의 식별자(ID) 타입입니다. ▪️ 엔티티가 영속성 컨텍스트에 없으면 Ent.. 2024. 3. 9.
[Java] Optional Optional public final class Optional { // If non-null, the value; if null, indicates no value is present private final T value; // 생략 } Java8에서는 Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와줍니다. 즉, Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와줍니다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 때문에 각종 메서드를 제공합니다. 🏷️ NPE(NullPointerException) // names가 null.. 2024. 1. 27.
[Java] Mockito Mockito Mock을 지원하는 프레임워크로 Mock 객체를 만들고 관리하고 검증 할 수 있는 방법 제공합니다. 쉽게 가짜 객체를 만들어준다고 생각하면 됩니다. 구현체가 아직 없는 경우나, 구현체가 있더라도 특정 단위만 테스트 하고 싶을 경우 주로 사용하게 됩니다. Mock이란 한글로 "모의, 가짜의" 라는 뜻으로 테스트할 때 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효용성을 높이기 위해 사용하는 것을 말합니다. 🏷️ Mock 객체 만드는 법 ✅ Mockito.mock(만들고자 하는 객체 타입.class) public class ListTest { @Test void simpleTest() { List listMock = mock(List.class); when(listMock.size(.. 2023. 12. 15.
[Spring/Web] CSRF CSRF( Cross Site Request Forgery ) 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법을 의미합니다. 위와 같이 A라는 도메인에서, 희생자가 조작된 요청정보를 포함한 게시물을 사용하였을 경우, 공격자도 권한을 가지게 되어서 A 도메인에서는 이 사용자가 일반 유저인지, 공격자의 악용된 공격인지 구분할 수가 없게 됩니다. 🏷️ CSRF의 특징 ▪️ XSS와 함께 웹에서 가장 효과적인 공격방법 ▪️ 스크립트가 없어도 공격이 가능한 방법 ▪️ 정상 사용자를 통해 공격이 진행되므로 공격자의 정보(IP 등)를 추적하는 것이 불가능 ▪️ Session Hijacking과 비슷한 권한을 도용한 .. 2023. 12. 4.