🚩 1. 이번 달의 주요 사건 📌 1-1. SQLD 시험 한 방에 합격하다! 지난 11월에 응시했던 SQLD 시험 결과가 나왔고, 1과목 만점과 함께 안정적인 점수로 합격했다. 지난 번에 1과목은 좋은 점수가 기대된다고 했는데 만점을 받았고 불안했던 2과목은 예상했던 것 보다 괜찮은 점수가 나와서 너무 기쁘다! 이번 회차가 어렵고 헷갈리는 지문이 많았다고 하는데 정말 다행이다🤩 공부 목적으로 도전한 시험인데, 개인 프로젝트를 하면서 ERD를 짜고 있는 지금! 확실히 도움이 많이 됐다고 느낀다. 이렇게 결과까지 얻어가니 보람차고 속이 후련하다. 그래도 SQL은 계속해서 써보고 공부할 예정이다. 📌 1-2. 코딩테스트 흥미를 느끼다. 이번 달 목표로 코테 문제를 풀고 30개 기록하기가 있었는데 아슬아슬하게 ..
🚩 1. 들어가며... 개인프로젝트를 진행하며 한 번도 해보지 않았던 배포와 관련 간단한 인프라를 구축해보았다. 배포를 위한 EC2 인스턴스 생성 후 EC2에 Redis Server 설치와 가비아에서 구입한 도메인 연결, 그리고 80포트 요청 8080포트로 포워딩하는 과정을 2편에 나눠 각종 에러에 대한 해결법을 기록할 겸 포스팅할 예정인데, 먼저 1편은 EC2 인스턴스 생성과 빌드 그리고 Redis설치하는 것을 포스팅할 것이다. 🚩 2. AWS EC2(Elastic Compute Cloud) 생성과 접속 아마존 웹 서비스에서 제공하는 클라우드 기반 컴퓨팅 서비스 사용자의 필요에 맞게 가상 서버를 생성/관리(확장, 축소) 가능 사용자가 선택한 가상 머신 유형과 스토리지 유형에 따라 비용 부과 📌 2-1...
🚩 1. 들어가며... 개인 프로젝트에서 회원가입 기능을 구현하면서 SMS문자 인증 기능을 도입하였다. 처음에는 문자 인증에 필요한 인증 번호를 세션에 저장하는 방식에서 레디스를 활용하여 저장한 후 인증하는 방식으로 변경했다. 왜 이런 판단을 하였는지, 세션 저장의 단점과 레디스 저장의 장점에 대해서 포스팅할 것이다. 🚩 2. 세션으로 인증 번호 관리하기(개선 전) @PostMapping("/send-certification-cod") @ResponseBody public String sendCertificationCode(@RequestParam String tel, HttpSession session) { String certificationCode = generateCertificationCode(..
🚩 1. 이번 달의 주요 사건 📌 1-1. SQLD 시험 응시 지난 10월 말, SQL공부겸 응시했던 SQLD 자격 시험을 드디어 치뤘다. 1과목 모델링과 2과목 SQL부분이 있었는데, 1과목은 좋은 점수가 기대된다. 하지만 2과목은 내가 문제를 괜히 한 번 더 꼬아 생각해버리는 바람에 틀린 문제도 있었다. 학창시절 때부터 가지고 있었던 버릇이다. 내가 아는 내용으로는 이게 맞다고 생각하면서도 혹시 내가 모르는 부분이 있나? 하면서 또 의심하는 버릇 때문인 것 같다. 좋게 생각하면 깊게 파고들어 스스로 학습하게 만드는 에너지의 발원지이기도 하지만 이렇게 부작용도 따른다. 양날의 검인 것 같다🥲 12월 8일에 사전 점수 공개인데 시험을 마치고 "점수 공개까지 어떻게 기다리냐..."라고 생각했다. 이글을 쓰..
🚩 1. 들어가며... Spring Data JPA를 사용하며 개인 프로젝트를 진행하고 있던 중 유저 계정의 활성화 여부를 별도로 값을 주지 않아도 기본값(true = '1')이 삽입되도록 데이터베이스에서 DEFAULT 값을 세팅해주었다. 이러한 과정에서 발생한 문제와 해결방법과 함께 포스팅한다. 🚩 2. 문제 상황 - 기본형 boolean과 데이터베이스 기본값 데이터 베이스의 DDL에서 'is_enabled' 컬럼을 tinyint NOT NULL DEFAULT '1'로 설정했다. 설정의 목적은 해당 엔티티의 필드에 값이 명시적으로 초기화 되지 않고, 쿼리에 포함되지 않는다면(null이 할당되는 것과는 다르다.) 데이터베이스가 자동으로 true = '1'을 기본값으로 사용할 수 있도록 하는 것이다. 하지..
🚩 1. 들어가며... JPA Spring Date를 공부할 목적으로 개인 프로젝트를 진행하며 Entity클래스를 구현하고 있던 중 Lombok 라이브러리의 @AllArgsConstructor의 문제점과 @Setter를 지양해야 한다는 것을 알게 되었다. 따라서 '@AllArgsConstructor', '@Setter'이 두 어노테이션을 사용하지 않고 Entity객체를 만들고 @ToString 사용시에도 순환 참조에 유의하여 사용하는 방법에 대해서 포스팅할 것이다. 🚩 2. @AllArgsConstructor, @Setter 사용을 지양하고 @Builder를 도입하기 📌 2-1 기존 코드 @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor @..
🚩 1. 스프링의 빈(Bean)은 무상태로 설계하자! 스프링 프레임워크에서 빈은 주로 싱글톤(SingleTone)으로 관리되는 객체를 말한다. 빈은 여러 요청에 걸쳐 공유되므로 상태를 가지게 되면 여러 문제점이 발생할 수 있다. 따라서 빈을 설계할 때는 무상태(StateLess)로 설계하는 것이 좋다. 📌 1-1. 무상태로 설계해야 하는 영역 자바의 빈으로 등록되는 객체 Controller, Service, Mapper/DAO, Repository 이러한 계층의 객체(클래스)는 여러 요청에 걸쳐 공유되므로 상태를 가지지 않도록 하는 것이 좋다. 여러 요청 간에 공유되는 객체 동시에 여러 사용자가 액세스할 수 있는 객체는 상태를 가지지 않는 것이 좋다. 상태를 가지게 되면 상태의 일관성을 유지하기 어려워 ..
🚩 1. 들어가며... 팀 프로젝트를 진행하면서 사용자의 입력을 검증하기 위해여 @Valid 어노테이션과 BindingResult 객체를 통해 간단한 검증을 수행하고 있었다. 하지만 태그 하나당의 글자 길이나 각 필드의 값을 서로 비교해야 하는 상대적으로 복잡한 검증이 필요했다. 그때 사용한 방법이 ' BindingResult'의 'rejectValue()' 메소드다. 이 둘을 적절하게 혼용하는 방법과 장단점에 대해서 포스팅할 것이다. 🚩 2. @Valid어노테이션 '@Valid' 어노테이션은 주로 사용자로부터 데이터를 처리하는 곳인 Controller 또는 Service계층에서 사용한다. 적용의 대상은 DTO나 Form클래스이며, 검사할 요청 파라미터 앞에 '@Valid'어노테이션을 붙여 유효성 검사를..
🚩 1. 리포지토리 인터페이스(Repository Interface)로 데이터 베이스 액세스 재사용 실현하기 📌 1-1. 인터페이스 정의 공통 리포지토리 인터페이스를 정의 이 인터페이스는 애플리케이션의 데이터 액세스 로직을 추상화하며, 메소드 시그니처를 제공 public interface MemberRepository { Member save(Member member); Optional findById(Long id); // ... 기타 메소드들 } 📌 1-2. JDBC 구현 MemberRepository 인터페이스를 확장하여 JDBC를 사용하는 구현체를 작성 public class JdbcMemberRepository implements MemberRepository { // ... JDBC를 사용하여..
📌 1. 자바 버전별 특징 자바는 여러가지 버전이 존재하고, 버전마다 주요한 기능들이 업데이트가 된다. 특히 8, 11, 17 버전은 LTS버전이기 때문에 많은 개발자들이 이용한다. LTS버전: 장기 지원 버전으로 안정성에 중점을 둔 버전으로, 최신 기능보다 안정성이 더 요구되는 곳에서 많이 쓰이며, 이용중인 다른 소프트웨어가 영향을 받는 것을 피하기 위해 기존의 버전을 유지하며 이용하기도 한다. LTS버전 기준으로 각 버전별 주요 기능을 알아보도록 한다. 📌 2. Java 8 람다 표현식: 함수형 프로그래밍을 지원한다. 코드를 간결하고 읽기 쉽게 만들어주는 기능이다. List names = Arrays.asList("가", "나", "다", "라", "마", "바", "사"); names.sort((o..