Coding/Server 14

Kafka를 이용해 로그 커스텀하여 저장하기(feat.ksqldb)

1. 메시지 큐와 MOM카프카를 이해하기 위해서는 메시지 큐와 MOM을 먼저 알아야한다. 메시지 큐는 분산화된 환경에서 발신자와 수신자 사이에서 메시지를 전송하고, 수신하는 기술을 의미한다. MOM(message oriented middleware)를 통해서 구현된다.메시지 큐를 사용하면 발신자와 수신자가 서로를 직접 알 필요가 없으므로 느슨한 결합으로 만들어낼 수 있다. 즉, 발신자와 수신자가 서로에게 의존하지 않으므로, 독립적으로 확장될 수 있다.또한, 수신자 서비스가 당장 장애 상황이더라도 모두 메시지 큐에 남아있으므로 결국 모든 메시지가 소비자 서비스에게 전달된다는 보장성을 갖는다. 마지막으로 비동기 통신으로 구현하여 무거운 작업을 요청할 수 있다. 메시지 큐는 크게 Point to Point와 ..

Coding/Server 2025.09.15

[내일배움캠프] QueryDSL

1. QueryDSL이란?QueryDSL은 미리 컴파일된 Q타입 클래스를 사용하여 타입 안전한 JPQL 쿼리를 동적으로 생성하는 기술이다. JPQL은 JPA의 쿼리 언어로, 데이터베이스에서 JPA 엔티티를 조회하거나 조작하는 데 사용된다. QueryDSL은 JPQL을 더 안전하고 유연하게 작성할 수 있도록 타입 안전한 메커니즘을 제공한다.2. Q타입 클래스란?Q타입 클래스는 JPA 엔티티의 메타모델로, 쿼리의 필드명과 타입을 컴파일 타임에 체크할 수 있게 도와준다. 이를 통해 오타나 잘못된 필드명이 있을 경우, 컴파일 타임에 오류를 잡을 수 있다. 또한, Q타입 클래스는 동적 쿼리를 포함한 쿼리를 더 유연하게 작성할 수 있도록 하는 여러 메소드들을 제공한다. 즉, QueryDSL가 JPQL를 작성하기 ..

Coding/Server 2025.05.14

[내일배움캠프] Spring Security + OAuth 2.0

1. Spring Security란?Spring Security란 Spring 기반 애플리케이션의 보안을 담당하는 프레임워크이며, 인증, 인가, CSRF, 세션 관리, 비밀번호 암호화 등 다양한 기능을 제공하고 있다. Spring Security는 기본적으로 Servlet Filter 기반으로 동작하며, FilterChainProxy를 통해 보안 관련 필터들을 순차적으로 적용한다. Spring Security가 강력한 이유는 Spring Security가 제공하는 아키텍처 위에서 개발할 경우 내가 크게 노력하지 않아도 객체지향이 녹여진 코드 작성이 가능하다는 데에 있다. 따라서 Spring Security를 쓸거면 반드시 아키텍처에 대한 확실한 이해를 가지는 게 필수다.1-1. Spring Securit..

Coding/Server 2025.05.11

[내일배움캠프] Redis와 분산락

1. Redis란? 1-1. 3가지 키워드Key:Value 구조의 데이터를 저장하기 위한 비관계형 데이터베이스(NoSQL)Disk가 아닌 Memory에 데이터를 저장하는 In-memory 방식Single-Thread로 동작한다. (순차적)1-2. 다양한 자료 구조Redis는 key는 string으로 고정되지만, value에는 다양한 자료 구조를 지원한다. String: 기본적인 get, set 외에도 mset, mget, setnx 등의 커맨드도 같이 기억하자. (있으면 ~ 없으면 ~)List: 대기열 구현, 최근 방문글 구현 등 다양한 활용이 가능하다. Set: smembers(전체조회), sismember(포함여부확인), sinter(교집합) 등의 명령어를 지원한다.** Hash: Value 안에 다..

Coding/Server 2025.05.01

[내일배움캠프] 양방향 연관관계

양방향 연관관계는 무한루프, 연관관계 주인 혼동 등 신경써야할 부분이 많아서 꼭 필요한 경우가 아니면 사용하지 않는 것이 좋다. 현재 코드는 다음과 같아 양방향으로 구현되어있다. (TodoComment, TodoManagers)@Getter@Entity@NoArgsConstructor@Table(name = "todos")public class Todo extends Timestamped { ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) private User user; @OneToMany(mappedBy = "todo", cascade = CascadeType.RE..

Coding/Server 2025.04.20

[내일배움캠프] 테스트코드 - 실습

1. 레이어별 테스트@SpringBootTestAll통합 테스트, 전체IntegrationTestBean 전체@WebMvcTestController단위 테스트, Mvc 테스트MockApiTestMVC 관련된 Bean (+Service)@DataJpaTestRepository단위 테스트, Jpa 테스트RepositoryTestJPA 관련 BeanNoneService단위 테스트, Service 테스트MockTestNone (+Repository)NoneDTO, Entity, Util…POJO, 도메인 테스트NoneNone 2. @Transctional 과 Rollback 설정Spring의 테스트 트랜잭션 처리 방식은 @Test 메서드 기준으로만 작동한다. 테스트에서는 데이터 롤백을 목적으로 @Transact..

Coding/Server 2025.04.17

[내일배움캠프] 테스트코드 - 이론

1. 테스트 코드는 무엇이고, 왜 작성해야할까?소프트웨어를 테스트한다는 것은 소프트웨어가 기대한대로 잘 동작하는지 확인하는 과정이다. 아마 소프트웨어를 개발하고 테스트하지 않는 사람은 없을 것이다.-> 이러한 테스트를 코드로써 하겠다는 것이다.💪🏻 테스트 코드를 작성함으로써 얻어지는 이점1. 테스트를 자주할 수 있게 된다.2. 리팩토링에 심리적인 안정감을 준다.3. 에러를 조기에 발견할 수 있다. 2. 테스트 코드 작성 전에 해야할 것테스트 코드가 무조건 많은 것보다, 질 좋은 테스트를 작성하는 것에 중요하다.이를 위해서는, "시나리오"를 잘 작성해야한다.카카오 로그인이 잘되는지 테스트1.~2.~3.~(BDD를 코드가 아닌, 글로 작성!)3. Mocking과 Stubbing: Test DoubleTe..

Coding/Server 2025.04.17

[내일배움캠프] Spring 숙련 과제 회고

과제 요구사항## 필수 기능 요구사항- 기존 코드를 모두 JPA를 활용하도록 수정합니다. - JPA Auditing을 활용한 작성일, 수정일 필드 - Entity와 Spring-Data-Jpa Repository를 도입- 이메일과 비밀번호를 활용해 로그인 / 회원가입 기능을 추가합니다. - 회원가입 API - 비밀번호 암호화(PasswordEncoder 구현) - 로그인 API 구현 - 필터를 활용한 인증/인가 처리 - Cookie/Session을 활용한 로그인 구현## 도전 기능 요구사항- 다양한 예외처리를 적용합니다. - 이메일 포맷 검증(정규 표현식) - 할 일 제목은 10글자 이내, 유저명은 4글자 이내- 댓글 CRUD를 구현합니다.- 일정 페이징 조회 - Sprin..

Coding/Server 2025.04.04

[내일배움캠프] Spring 입문

Web ApplicationWeb Server웹 서버는 HTTP 기반으로 동작하며, 정적 리소스(HTML, CSS, JS, 이미지 등)을 제공한다.예) nginx, apacheWAS(Web Application Server)WAS는 HTTP 기반으로 동작하며 웹 서버의 기능을 포함한다. 추가적으로 코드를 실행해서 애플리케이션 로직을 수행하고 DB와 상호작용하여 동적 컨텐츠를 생성한다.예) tomcat, jetty, undertow 💘 Web Server와 WAS의 차이점실제로는 웹 서버도 애플리케이션 로직을 포함할 수 있다. WAS는 애플리케이션 코드를 실행하는 것에 더욱 특화되어 있다. 자바에서는 서블릿 컨테이너 기능을 제공하면 WAS이다. WAS만 사용하면 서버 과부하 발생 가능성이 높아지고, WA..

Coding/Server 2025.03.25