본문 바로가기

Web34

[Spring] @Valid, @Validated과 Custom Annotation (1) 👀 들어가기 앞서 이번에 프로젝트를 진행하다가 DTO와 객체에 대한 유효성 검증을 어떻게 할까 많이 고민했다. 별도로 검증하는 클래스를 만들자니 대상이 많이 없어서 괜히 구현하면 의존성만 커질 것 같았다. 그래서 Annotation을 구현해서 검증을 해보도록 했다. 🤔 왜 사용했나요? 커스텀 어노테이션은 양날의 검이라고 생각한다. 덕지덕지 붙은 어노테이션 불호..! 어노테이션을 까보지 않는 이상 어떤 의도로 동작하는지 정확하게 알 수 없기 때문이다! 하지만 간결함이 큰 강점이기 때문에 고민했다. 이메일을 후보키처럼 사용해 많은 로직에 이메일을 요구했는데, 검증용 클래스가 그만큼 여러 곳에서 사용되었다. 커스텀을 통해서 검증 클래스를 없애 의존성을 줄이고, 서비스 계층에 들어오기 전에 처리하고 싶었다. 추.. 2023. 3. 19.
[토비의 스프링] 테스트 (2장) 2.1 UserDaoTest 다시 보기 2.1.1 테스트의 유용성 UserDao에서 관심을 분리하고 기능을 확장할 때 테스트가 없었다면 불안했을 것이다. 머릿속으로 시뮬레이션을 돌려보는 방법은 100% 확신할 수 없기 때문에 테스트란 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지 확신할 수 있게 해주는 작업이 필요하다. 2.1.2 UserDaoTest의 특징 웹을 통한 DAO 테스트 방법의 문제점 웹 화면을 통한 테스트는 가장 흔히 쓰이는 방법이지만 단점이 너무 많다. 테스트를 위해 사용되는 자원이 많기 때문에 DAO만 테스트하고 싶은데 다른 곳에서 문제가 발생할 수 있다. 작은 단위의 테스트 테스트 수행 과정을 간단히 하고 오류를 쉽게 찾을 수 있게 하기 위해서 작은 단위로 쪼개는 것이 중요하다.. 2023. 1. 16.
[토비의 스프링] 오브젝트와 의존관계 (1장) 1.2 dao의 분리 객체지향의 꽃은 결국 관심사를 분리하는 것 (Seperating of Concerns) 왜? 자유로운 변경, 발전, 확장을 위해서 어떻게? 관심이 다른 것을 가능한 분리하여 서로 영향을 주지 않게 템플릿 메소드 패턴 : 슈퍼 클래스에 기본적인 기능을 구현하고 기능의 일부를 서브 클래스에 필요에 맞게 구현할 수 있도록 하는 패턴. (protect로 선택 가능하게, 추상 메서드로는 꼭 구현하게) 여기서 템플릿 메소드란? 기본 알고리즘 골격을 담은 메소드, 애플리케이션의 run() 같은게 템플릿 메서드이다. 훅 메서드 : protect로 구현된 선택적으로 오버라이드가 가능한 메서드 팩토리 메서드 패턴 : 서브 클래스에서 구체적인 오브젝트 생성 방법과 클래스를 결정하게 하는 패턴. 슈퍼클래.. 2022. 12. 21.
[React] useEffect 경고 : React Hook useEffect has missing dependencies 📌 UseEffect 렌더링 이후에 발생하는 Side Effect들을 처리하기 위해 제공하는 리액트 Hook이다. // Callback Function, deps로 구성되어 있다. useEffect( () => { do something.. }, [deps]) deps에 지정해둔 값에 따라 다음과 같은 Side Effect에 맞춰 Callback 함수를 실행한다. Mount, 처음 나타났을 때 Unmount, 사라질 때 Update, 특정 props가 바뀔 때 🧐 Missing Dependency Warnig? React Hook useEffect has a missing dependency: 'xxxxx'. Either include it or remove the dependency array. (re.. 2022. 10. 26.
[Backend] 트랜잭션, Transaction (1) ✍️ 학습 목표 트랜잭션 트랜잭션 격리 수준 📌 트랜잭션 트랜잭션이란? 데이터베이스의 상태를 변화시키는 작업의 단위이다. Data Manipulation Language(DML)을 사용해서 DB에 접근하는 것을 말한다. 🧷 트랜잭션 특징, ACID Atomicity : 트랜잭션이 DB에 모두 반영되거나 반영되지 않아야 한다. Consistency : 트랜잭션 이전과 이후의 데이터베이스의 상태는 동일해야 한다. Isolation : 모든 트랜잭션은 다른 트랜잭션으로부터 독립적이다. Durability : 성공적으로 처리된 트랜잭션의 결과는 지속적으로 유지돼야 한다. 🧷 트랜잭션 연산 Rollback : 작업 도중 오류가 발생하면 이전 상태로 되돌린다. Commit : 작업이 성공적으로 처리되면 데이터베이스.. 2022. 10. 13.
[Security] Spring Security (2) ✍️ 학습 목표 의존성 추가 사용자 설정 권한 설정과 표현 📌 의존성 추가하기 🧷 Maven project - pom.xml org.springframework.boot spring-boot-starter-security 🧷 Gradle project - build.gradle implementation 'org.springframework.boot:spring-boot-starter-security' 스프링 시큐리티의 의존성을 추가하면 다음과 같은 기능을 사용할 수 있다. 서버가 가동되면 스프링 시큐리티 초기화 작업과 웹 보안 설정이 이루어진다. 모든 요청이 인증되어야 자원에 접근할 수 있다. 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공한다. 기본 로그인·로그아웃 페이지(+기본 .. 2022. 10. 5.