Language/Java 9

Spring에서 SQL Injection을 어떻게 방어할까?

SQL Injection우선 SQL Injection이 무엇인지 간단하게 알아보자.SQL Injection은 해석 그대로 SQL 쿼리를 삽입하는 공격 방법이다.이 공격 방법을 예로 설명하자면 로그인을 할 때 틀린 비밀번호를 이용해 인증하여 인가 권한을 받을 수 있을 것이다.4년 주기로 웹 애플리케이션 보안 취약점 Top 10을 OWASP에서 올려주는데 이전 2017년보다 2021년에 Injection 공격이 낮아지기는 하였으나 꾸준히 올라오는 위험한 취약점이다.SQL Injection 대응방안SQL Injection을 대응하는 방법에는 크게 2가지로 분류할 수 있다.첫 번째로는 Stored Procedure나 Prepared Statement를 사용하는 것이고, 두 번째로는 특정 문자를 필터링해주는 것이..

Language/Java 2024.05.23

queryDSL 사용방법

Config 설정 queryDSL을 사용하기 위해서 Dependency를 추가해줘야 한다. implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" build.gradle에 해당 스크립트를 추가해준다. 그리고 queryDSL은 JPAQueryFactory를 통해서 사용해야 하기 때문에 빈 등록을 해줘야 한다. Config ..

Language/Java 2024.03.14

JPA에 대해 깊이 알아보자

JPA에 대해 깊이 알아보기 위해 체크리스트 JDBC 와 Persistence Framework 의 차이점에 대해 설명할 수 있다. JDBC Template 과 MyBatis 의 차이점에 대해 설명할 수 있다. SQL Mapper 와 ORM 의 차이점에 대해 설명할 수 있다. MyBatis 가 쿼리를 생성하는 2가지 방법에 대해 설명할 수 있다. 영속성 컨텍스트와 쓰기지연의 연관성에 대해서 설명할 수 있다. 다대다 관계를 현업에서 주로 어떻게 구현하여 사용하는지 설명할 수 있다. 부모가 자식의 영속성을 완전히 관리하기 위해서 사용하는 cascade 옵션을 설명할 수 있다. 현업에서 주로 사용하는 Fetch 전략에 대해서 설명할 수 있다. QueryDSL 의 버전별 연동방법을 설명할 수 있다. QueryD..

Language/Java 2024.03.07

Service 인터페이스와 구현체 분리

왜 분리해서 사용할까? 인터페이스와 구현체를 분리함으로써 구현체를 독립적으로 확장할 수 있으며, 구현체 클래스를 변경하거나 확장해도 이를 사용하는 클라이언트의 코드에 영향을 주지 않도록 하기 위함이기 때문이다. 이러한 구조로 프로젝트를 설계했을 때, interface에서 정의한 기능을 새로운 방식으로 구현해야 한다면 사용해야 하는 곳에서 구현체만 손쉽게 바꿀 수 있기 때문에 Service를 인터페이스로 만들고, 해당 기능을 ServiceImpl라는 클래스 로 구현하는 것이다. 사용 장점 확장 가능성과 유지보수성 현재는 인터페이스와 구현체 클래스가 일대일 관계를 맺고 있을지라도 언제 서비스가 커져서 구현체 클래스가 확장될지를 모른다. 그래서 이러한 구조로 확장 가능성을 열어둔다면 유지보수하기 편리하다. 협..

Language/Java 2024.03.06

@Component, @Bean, @Autowired가 뭘까?

일단 결과적으로 이 세 어노테이션들은 모두 빈을 등록하는 어노테이션이다. 근데 왜 구분하여 사용하는 걸까? 용도가 다르니 구분했겠지. @Component @Component는 개발자가 직접 작성한 클래스 파일에 대해 Bean을 등록하기 위한 어노테이션이다. 예를 들면 Controller, Service 어노테이션을 보면 @Component가 붙어있는 것을 볼 수 있다. @Bean @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean 등록하기 위한 어노테이션이다. @Autowired @Autowired는 @Component를 통해 등록된 Bean을 다른 곳에서 의존성 주입(DI)을 위해 사용하는 어노테이션이다. @Autowired를 통해 의존성을 주입하는 방법은 세 가지가 있다. 생성자..

Language/Java 2024.03.05

@NoArgsConstructor (access = AccessLevel.PROTECTED) 사용 이유

접근 권한을 Protected로 제어하기 위한 것이다. 같은 패키지나 자식 클래스에서 사용할 수 있도록 하기 때문에 무분별한 생성자 사용을 억제할 수 있다. 다른 접근 권한과 함께 설명하자면 접근 권한을 Private로 하면 프록시 객체 생성에 문제가 생기고, 접근 권한을 Public으로 하면 무분별한 객체 생성 및 Setter를 통한 값 주입을 할 수 있기에 접근 권한을 Protected로 작성 하는 것이다.

Language/Java 2024.03.04

자바의 객체지향 정리

클래스와 객체 클래스의 정의 : 클래스란 객체를 정의해 놓은 것이다. 클래스의 용도 : 클래스는 객체를 생성하는데 사용한다. 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념 객체의 용도 : 객체가 가지고 있는 속성과 기능에 따라 다르다. 쉽게 표현하자면 이렇다. 클래스 객체 제품 설계도 제품 TV 설계도 TV 붕어빵 기계 붕어빵 객체와 인스턴스 용어 정리 객체 : 모든 인스턴스를 대표하는 일반전인 용어 인스턴스 : 특정 클래스로부터 생성된 객체 인스턴스화 : 클래스 => 인스턴스 더 쉽게 정리되어진 글을 찾아봤다. 객체의 구성요소 객체 = 속성(변수) + 기능(메서드) 객체의 생성 객체의 생성 클래스명 변수명; - 클래스의 객체를 참조하기 위한 참조변수를 선언 변수명 = new 클래스명; - 생성된..

Language/Java 2023.12.22

JVM

JDK, JRE, JVM JDK, JRE, JVM에 대한 용어를 정리하자면 JDK : Java Development Kit / 자바 개발 도구 JRE : Java Runtime Environment / 자바 실행 환경 JVM : Java Virtual Machine / 자바 가상 기계 Java의 호환성 Java와 C언어의 차이점은 무엇일까? Java는 Write Once Use Anywhere 이라는 목적을 가지고 있다. 번역하자면, "소스파일을 하나만 작성하면 어디에서든지 사용이 가능하다!" 이다. 반면에 C언어는 One Source Multi Object Use Anywhere 번역하자면, "하나의 소스파일로 각 기계에 맞는 목적파일로 만들어 어디든 사용 가능하다!" 이다. 정리해 보자면, 하나의 목..

Language/Java 2023.12.21

[Java] Enum으로 상수 관리

우테코 프리코스 1주차로 숫자 야구 게임을 만들고 참가자 한 분이 static final로 상수를 관리했는데 Enum으로 관리해보라고 하셨다. Enum을 타입스크립트를 통해서 사용해 본 경험이 있어서 사용하는 방법만 익혔다. package baseball; public enum GameConstant { STARTING_STRING("숫자 야구 게임을 시작합니다."), RESTARING_STRING("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."), ENDING_STRING("3개의 숫자를 모두 맞히셨습니다! 게임 종료"), INPUT_STRING("숫자를 입력해주세요 : "), STRIKE("스트라이크"), BALL("볼 "), NOTHING("낫싱"), RESTART("1"), END("..

Language/Java 2023.10.27