[개발 일기] 2025.03.20 - 에러 로그를 찍어도 되나? (Feat : 시큐어 코딩)
·
개발 일기
💡 개요 OKKY에선 예외가 발생하면 해당 예외에 대한 로그를 찍으면 되냐 안 되냐 시큐어 코딩 위반이냐 아니냐에 대해 이야기하는 것을 봤다.  오늘은 에러 로그를 찍는게 맞는지 아닌지 정리해 보자.   📕 시큐어 코딩 시큐어 코딩이란 ‘사용자가 입력한 데이터는 신뢰할 수 있는 데이터가 아니다’라는 전제를 기반으로 코드를 작성하는 것이다.  🛠️ 시큐어 코딩 점검 항목 입력 데이터 검증 및 표현사용자의 입력값을 검증하여 SQL Injection, XSS, CSRF을 방지한다.예: 사용자 입력값을 검증하고, SQL 쿼리 실행 전에 바인딩 처리하여 실행보안 기능인증, 접근 제어, 암호화 등을 적절히 적용하여 보안 기능을 강화해야 한다.예: 비밀번호를 평문으로 저장하지 않고, 해시 함수(예: bcrypt..
[개발 일기] 2025.03.19 - @Valid
·
개발 일기
💡 개요 Spring에서 값 검증에 자주 사용되는 @Valid는 어떨 때 사용하는 것일까?   📕 @Valid 난 보통 DDD 패턴에서 엔티티의 Value Object를 사용하기 때문에 해당 객체 내부에서 값 검증을 하는 경우가 많다.  하지만 Value Object는 주로 엔티티와 함께 사용되고, 데이터베이스에 접근하기 전 단계에서 활용된다.  이때 클라이언트의 요청은 Controller → Service → Repository 흐름으로 진행되는데, 만약 잘못된 값이 들어오면 최종적으로 Repository 단의 직전에 검증 오류가 발생한다.  서버 입장에서는 잘못된 데이터가 최대한 빨리 차단되는 것이 효율적이기 때문에, 가능한 앞단에서 검증을 수행하는 것이 좋다.  이때 사용하는 것이 @Valid ..
[개발 일기] 2025.03.18 - MultipartFile와 Setter의 관계
·
개발 일기
💡 개요 MultipartFile을 Controller에서 받기 위해선 Setter가 필요하다.  @Setterpublic class ProductRegisterRequest { private String productName; private String productContent; private int price; private MultipartFile file; ...} @RestController@RequiredArgsConstructor@RequestMapping("/api/v1/products")public class ProductController { private final ProductService productService; @PostMapping(..
[개발 일기] 2025.03.17 - Code Kata
·
개발 일기
💡 개요코드 카타(Code Kata)란 프로그래밍 실력을 기르기 위한 연습이다.  오늘은 이 코드 카타에 대해 정리해 보자.  📕 코드 카타(Code Kata)카타의 사전적 의미는 무술의 기본동작을 의미한다.  아마 한국으로 치면 태권도의 품새 같은 거 일듯..?  코딩의 품새구나..!  보통 문제들은 아래의 형식으로 나온다. 10보다 작은 자연수 중 3 또는 5의 배수를 모두 나열하면 3, 5, 6, 9가 나옵니다. 이 배수들의 합은 23입니다.전달된 숫자보다 작은 3 또는 5의 모든 배수의 합을 반환하도록 설루션을 완성하세요.참고사항: 숫자 가 3과 5의 배수인 경우, 한 번만 세십시오.  이걸 for문으로 구현해 보고, for문으로 구현했으면 stream()으로 구현해보고 이러한 과정을 반복 숙..
[개발 일기] 2025.03.16 - Session.invalidate()
·
개발 일기
💡 개요Session.invalidate() 을 하면 세션 저장소에 있는 모든 세션 정보가 삭제될까?  아니면 해당 요청을 한 사용자(스레드) 정보만 삭제될까?  오늘은 이 내용에 대해 정리해보자.   📕 Session.invalidate()invalidate의 사전적 의미는 무효화이다.  invalidate() 메서드도 마찬가지이다.  사용자의 세션 정보를 사용하지 못하게 무효화하는 것이다.  그렇다면 여기서 궁금한 게, invalidate()는 모든 세션 정보를 무효화할 까, 아니면 해당 사용자의 정보만 무효화할까?  정답은 당연하게도 invalidate() 를 호출한 사용자의 정보만 무효화한다.  사실 많은 블로그에서 ‘세션을 완전하게 삭제할 때 invalidate() 사용!’ 이런 식으로 글을..
[개발 일기] 2025.03.15 - LATERAL JOIN
·
개발 일기
💡 개요오늘은 MySQL과 같은 SQL 기반 데이터베이스에서 사용되는 쿼리인 LATERAL JOIN에 대해 정리해보자.   📕 LATERAL JOIN LATERAL JOIN이란 서브 쿼리 내부에서 외부의 컬럼을 참조하고자 할 때 사용하는 방법이다.  역시나 말로는 설명이 어렵다.  다음은 각 사용자가 작성한 게시글 중, 가장 최근에 작성된 게시글을 조회하는 쿼리 예시이다.   회원 테이블 id회원 이름1홍길동2이형석   게시판 테이블 idmember_idboard_titleboard_content11길동이의 일기…21길동이 플레이리스트…32형석이의 성장일기…   LATERAL JOIN 을 사용하지 않은 쿼리 SELECT m.id AS member_id, m.name AS member_na..