๑ `⌃´ ๑
Java · 16
Spring
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
Spring
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
💙
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
Spring
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
Spring
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
Controller ↓Application Service ↓Domain ↓Repository Interface ↓Infrastructure / Repository 구현체 각 계층은 왜 존재하는가?Application Service와 Domain은 무엇이 다른가?Repository Interface는 왜 두는가?DIP는 왜 필요한가? 1. Layered Architecture란?계층형 아키텍처. 프로그램의 역할을 여러 층으로 나누는 구조.Spring Boot에서 흔히 보는 구조는 `Controller → Service → Repository → Database`이다.이것도 대표적인 Layered Architecture인데, 각 계층에 다른 책임을 준다. 2. 왜 굳이 계층을 나누나?아주 극단적인 코드를..
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
Controller ↓Application Service ↓Domain ↓Repository Interface ↓Infrastructure / Repository 구현체 각 계층은 왜 존재하는가?Application Service와 Domain은 무엇이 다른가?Repository Interface는 왜 두는가?DIP는 왜 필요한가? 1. Layered Architecture란?계층형 아키텍처. 프로그램의 역할을 여러 층으로 나누는 구조.Spring Boot에서 흔히 보는 구조는 `Controller → Service → Repository → Database`이다.이것도 대표적인 Layered Architecture인데, 각 계층에 다른 책임을 준다. 2. 왜 굳이 계층을 나누나?아주 극단적인 코드를..
💙
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
2026.08.25
Controller ↓Application Service ↓Domain ↓Repository Interface ↓Infrastructure / Repository 구현체 각 계층은 왜 존재하는가?Application Service와 Domain은 무엇이 다른가?Repository Interface는 왜 두는가?DIP는 왜 필요한가? 1. Layered Architecture란?계층형 아키텍처. 프로그램의 역할을 여러 층으로 나누는 구조.Spring Boot에서 흔히 보는 구조는 `Controller → Service → Repository → Database`이다.이것도 대표적인 Layered Architecture인데, 각 계층에 다른 책임을 준다. 2. 왜 굳이 계층을 나누나?아주 극단적인 코드를..
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
Controller ↓Application Service ↓Domain ↓Repository Interface ↓Infrastructure / Repository 구현체 각 계층은 왜 존재하는가?Application Service와 Domain은 무엇이 다른가?Repository Interface는 왜 두는가?DIP는 왜 필요한가? 1. Layered Architecture란?계층형 아키텍처. 프로그램의 역할을 여러 층으로 나누는 구조.Spring Boot에서 흔히 보는 구조는 `Controller → Service → Repository → Database`이다.이것도 대표적인 Layered Architecture인데, 각 계층에 다른 책임을 준다. 2. 왜 굳이 계층을 나누나?아주 극단적인 코드를..
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
Controller ↓Application Service ↓Domain ↓Repository Interface ↓Infrastructure / Repository 구현체 각 계층은 왜 존재하는가?Application Service와 Domain은 무엇이 다른가?Repository Interface는 왜 두는가?DIP는 왜 필요한가? 1. Layered Architecture란?계층형 아키텍처. 프로그램의 역할을 여러 층으로 나누는 구조.Spring Boot에서 흔히 보는 구조는 `Controller → Service → Repository → Database`이다.이것도 대표적인 Layered Architecture인데, 각 계층에 다른 책임을 준다. 2. 왜 굳이 계층을 나누나?아주 극단적인 코드를..
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
Controller ↓Application Service ↓Domain ↓Repository Interface ↓Infrastructure / Repository 구현체 각 계층은 왜 존재하는가?Application Service와 Domain은 무엇이 다른가?Repository Interface는 왜 두는가?DIP는 왜 필요한가? 1. Layered Architecture란?계층형 아키텍처. 프로그램의 역할을 여러 층으로 나누는 구조.Spring Boot에서 흔히 보는 구조는 `Controller → Service → Repository → Database`이다.이것도 대표적인 Layered Architecture인데, 각 계층에 다른 책임을 준다. 2. 왜 굳이 계층을 나누나?아주 극단적인 코드를..
[설계] Layered Architecture / Application Service / Repository Interface / DIP
2026.08.25
Controller ↓Application Service ↓Domain ↓Repository Interface ↓Infrastructure / Repository 구현체 각 계층은 왜 존재하는가?Application Service와 Domain은 무엇이 다른가?Repository Interface는 왜 두는가?DIP는 왜 필요한가? 1. Layered Architecture란?계층형 아키텍처. 프로그램의 역할을 여러 층으로 나누는 구조.Spring Boot에서 흔히 보는 구조는 `Controller → Service → Repository → Database`이다.이것도 대표적인 Layered Architecture인데, 각 계층에 다른 책임을 준다. 2. 왜 굳이 계층을 나누나?아주 극단적인 코드를..
Spring
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
Spring
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
💙
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
[TDD] Sequence Diagram / 주문 처리 실행 흐름
2026.08.21
규칙들을 어떤 순서로 실행해야 하는가? 백엔드 기능은 여러 작업을 단순히 나열하는 것이 아니라, 실행 순서와 실패 시 남는 상태까지 생각해서 설계해야 한다.예를 들어 주문 하나에도 `쿠폰 검증`, `재고 차감`, `포인트 차감`, `주문 저장` 과 같은 작업들이 있을 수 있다.중요한 것은 "전부 다 실행하면 되지." 하는 게 아니다.무엇을 먼저 해야 하지? 중간에 실패하면 어떻게 되지? 순서를 바꾸면 어떤 문제가 생기지? Seqence Diagram이란?누가 누구를 어떤 순서로 호출하는지 시간 흐름에 따라 그려놓은 그림 아주 단순한 상품 조회 API를 예로 들면,Client | | GET /products/1 vController | | findProduct(1) vProductS..
Spring
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
Spring
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
💙
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
[TDD] 자연어 요구사항을 테스트 케이스로 바꾸기
2026.08.21
이미 사용된 쿠폰은 사용할 수 없다. 이런 요구사항이 있다고 예를 들자.if (coupon.isUsed()) { ...} 바로 위와 같은 코드를 생각하는 것이 아니라,먼저 이렇게 생각해야 한다.누가 사용하는가?어떤 상태여야 사용할 수 있는가?사용하면 상태가 어떻게 바뀌는가?어떤 경우에 실패해야 하는가?실패하면 기존 상태는 어떻게 되어야 하는가? 왜 요구사항을 바로 코드로 옮기면 안될까?자연어 요구사항은 생각보다 모호하다.`쿠폰을 사용할 수 있다.` 이 문장만 보고 구현하면 여러 질문이 빠진다.누가 사용할 수 있지?본인 쿠폰만 가능한가?이미 사용한 쿠폰은?존재하지 않는 쿠폰은?유효기간은?사용한 뒤에는 어떤 상태가 되지?실패했을 때 상태는? 개발자가 이런 것을 정리하지 않고 바로 구현하면 코드 안에서..
Spring
[TDD] TDD 맛보기
2026.08.20
Spring
[TDD] TDD 맛보기
2026.08.20
TDD: Red → Green → Refactor 목표요구사항 ↓실패하는 테스트 작성 ↓RED ↓최소 구현 ↓GREEN ↓코드 정리 ↓REFACTOR ↓테스트가 계속 통과하는지 확인 RED : 내 테스트가 실제로 아직 구현되지 않은 요구사항 때문에 실패하고 있다는 뜻 1. TDD에서 왜 일부러 실패하는 테스트부터 만드나?보통 개발을 하면 이런 순서를 떠올리기 쉽다.Product 클래스 작성↓decreaseStock() 구현↓잘 되는지 테스트 작성 TDD에서는 순서를 뒤집는다."재고를 하나 차감하면 9가 되어야 해"↓그 요구사항을 테스트로 먼저 작성↓당연히 아직 구현이 없으므로 실패↓그 테스트를 통과할 만큼만 구현 2. RED 테스트 작성test 폴더에 `ProductTest.java`를 ..
[TDD] TDD 맛보기
2026.08.20
TDD: Red → Green → Refactor 목표요구사항 ↓실패하는 테스트 작성 ↓RED ↓최소 구현 ↓GREEN ↓코드 정리 ↓REFACTOR ↓테스트가 계속 통과하는지 확인 RED : 내 테스트가 실제로 아직 구현되지 않은 요구사항 때문에 실패하고 있다는 뜻 1. TDD에서 왜 일부러 실패하는 테스트부터 만드나?보통 개발을 하면 이런 순서를 떠올리기 쉽다.Product 클래스 작성↓decreaseStock() 구현↓잘 되는지 테스트 작성 TDD에서는 순서를 뒤집는다."재고를 하나 차감하면 9가 되어야 해"↓그 요구사항을 테스트로 먼저 작성↓당연히 아직 구현이 없으므로 실패↓그 테스트를 통과할 만큼만 구현 2. RED 테스트 작성test 폴더에 `ProductTest.java`를 ..
💙
[TDD] TDD 맛보기
2026.08.20
2026.08.20
TDD: Red → Green → Refactor 목표요구사항 ↓실패하는 테스트 작성 ↓RED ↓최소 구현 ↓GREEN ↓코드 정리 ↓REFACTOR ↓테스트가 계속 통과하는지 확인 RED : 내 테스트가 실제로 아직 구현되지 않은 요구사항 때문에 실패하고 있다는 뜻 1. TDD에서 왜 일부러 실패하는 테스트부터 만드나?보통 개발을 하면 이런 순서를 떠올리기 쉽다.Product 클래스 작성↓decreaseStock() 구현↓잘 되는지 테스트 작성 TDD에서는 순서를 뒤집는다."재고를 하나 차감하면 9가 되어야 해"↓그 요구사항을 테스트로 먼저 작성↓당연히 아직 구현이 없으므로 실패↓그 테스트를 통과할 만큼만 구현 2. RED 테스트 작성test 폴더에 `ProductTest.java`를 ..
[TDD] TDD 맛보기
2026.08.20
TDD: Red → Green → Refactor 목표요구사항 ↓실패하는 테스트 작성 ↓RED ↓최소 구현 ↓GREEN ↓코드 정리 ↓REFACTOR ↓테스트가 계속 통과하는지 확인 RED : 내 테스트가 실제로 아직 구현되지 않은 요구사항 때문에 실패하고 있다는 뜻 1. TDD에서 왜 일부러 실패하는 테스트부터 만드나?보통 개발을 하면 이런 순서를 떠올리기 쉽다.Product 클래스 작성↓decreaseStock() 구현↓잘 되는지 테스트 작성 TDD에서는 순서를 뒤집는다."재고를 하나 차감하면 9가 되어야 해"↓그 요구사항을 테스트로 먼저 작성↓당연히 아직 구현이 없으므로 실패↓그 테스트를 통과할 만큼만 구현 2. RED 테스트 작성test 폴더에 `ProductTest.java`를 ..
[TDD] TDD 맛보기
2026.08.20
TDD: Red → Green → Refactor 목표요구사항 ↓실패하는 테스트 작성 ↓RED ↓최소 구현 ↓GREEN ↓코드 정리 ↓REFACTOR ↓테스트가 계속 통과하는지 확인 RED : 내 테스트가 실제로 아직 구현되지 않은 요구사항 때문에 실패하고 있다는 뜻 1. TDD에서 왜 일부러 실패하는 테스트부터 만드나?보통 개발을 하면 이런 순서를 떠올리기 쉽다.Product 클래스 작성↓decreaseStock() 구현↓잘 되는지 테스트 작성 TDD에서는 순서를 뒤집는다."재고를 하나 차감하면 9가 되어야 해"↓그 요구사항을 테스트로 먼저 작성↓당연히 아직 구현이 없으므로 실패↓그 테스트를 통과할 만큼만 구현 2. RED 테스트 작성test 폴더에 `ProductTest.java`를 ..
[TDD] TDD 맛보기
2026.08.20
TDD: Red → Green → Refactor 목표요구사항 ↓실패하는 테스트 작성 ↓RED ↓최소 구현 ↓GREEN ↓코드 정리 ↓REFACTOR ↓테스트가 계속 통과하는지 확인 RED : 내 테스트가 실제로 아직 구현되지 않은 요구사항 때문에 실패하고 있다는 뜻 1. TDD에서 왜 일부러 실패하는 테스트부터 만드나?보통 개발을 하면 이런 순서를 떠올리기 쉽다.Product 클래스 작성↓decreaseStock() 구현↓잘 되는지 테스트 작성 TDD에서는 순서를 뒤집는다."재고를 하나 차감하면 9가 되어야 해"↓그 요구사항을 테스트로 먼저 작성↓당연히 아직 구현이 없으므로 실패↓그 테스트를 통과할 만큼만 구현 2. RED 테스트 작성test 폴더에 `ProductTest.java`를 ..
[TDD] TDD 맛보기
2026.08.20
TDD: Red → Green → Refactor 목표요구사항 ↓실패하는 테스트 작성 ↓RED ↓최소 구현 ↓GREEN ↓코드 정리 ↓REFACTOR ↓테스트가 계속 통과하는지 확인 RED : 내 테스트가 실제로 아직 구현되지 않은 요구사항 때문에 실패하고 있다는 뜻 1. TDD에서 왜 일부러 실패하는 테스트부터 만드나?보통 개발을 하면 이런 순서를 떠올리기 쉽다.Product 클래스 작성↓decreaseStock() 구현↓잘 되는지 테스트 작성 TDD에서는 순서를 뒤집는다."재고를 하나 차감하면 9가 되어야 해"↓그 요구사항을 테스트로 먼저 작성↓당연히 아직 구현이 없으므로 실패↓그 테스트를 통과할 만큼만 구현 2. RED 테스트 작성test 폴더에 `ProductTest.java`를 ..
Spring
[TDD] 좋은 테스트란 무엇인가
2026.08.19
Spring
[TDD] 좋은 테스트란 무엇인가
2026.08.19
다음과 같은 코드를 만들었다고 생각해보자.상품 재고 = 10사용자가 상품 하나를 구매했다. 이때 원하는 결과는 무엇일까?상품 재고 = 9그러면 프로그램을 작성한 뒤 사람이 매번 실행해서 9가 됐는지 확인할 수도 있다.하지만 코드가 커지면 이 방법은 불가능해진다. 그래서 테스트 코드가 대신 확인한다.초기 재고가 10이고↓상품 하나를 판매했을 때↓남은 재고는 9여야 한다. 1. 테스트는 왜 작성할까?테스트를 단순히 버그가 있는지 찾는 코드라고 생각하면 조금 부족하다.테스트에는 중요한 역할이 세 가지 있다. 첫째, 내가 작성한 코드가 요구사항을 지키는지 확인한다.요구사항이 "재고가 10일 때 하나를 판매하면 재고는 9가 된다." 일 경우,테스트는 10 → 1개 판매 → 9인지 확인 절차로 수행한다. 둘째, ..
[TDD] 좋은 테스트란 무엇인가
2026.08.19
다음과 같은 코드를 만들었다고 생각해보자.상품 재고 = 10사용자가 상품 하나를 구매했다. 이때 원하는 결과는 무엇일까?상품 재고 = 9그러면 프로그램을 작성한 뒤 사람이 매번 실행해서 9가 됐는지 확인할 수도 있다.하지만 코드가 커지면 이 방법은 불가능해진다. 그래서 테스트 코드가 대신 확인한다.초기 재고가 10이고↓상품 하나를 판매했을 때↓남은 재고는 9여야 한다. 1. 테스트는 왜 작성할까?테스트를 단순히 버그가 있는지 찾는 코드라고 생각하면 조금 부족하다.테스트에는 중요한 역할이 세 가지 있다. 첫째, 내가 작성한 코드가 요구사항을 지키는지 확인한다.요구사항이 "재고가 10일 때 하나를 판매하면 재고는 9가 된다." 일 경우,테스트는 10 → 1개 판매 → 9인지 확인 절차로 수행한다. 둘째, ..
💙
[TDD] 좋은 테스트란 무엇인가
2026.08.19
2026.08.19
다음과 같은 코드를 만들었다고 생각해보자.상품 재고 = 10사용자가 상품 하나를 구매했다. 이때 원하는 결과는 무엇일까?상품 재고 = 9그러면 프로그램을 작성한 뒤 사람이 매번 실행해서 9가 됐는지 확인할 수도 있다.하지만 코드가 커지면 이 방법은 불가능해진다. 그래서 테스트 코드가 대신 확인한다.초기 재고가 10이고↓상품 하나를 판매했을 때↓남은 재고는 9여야 한다. 1. 테스트는 왜 작성할까?테스트를 단순히 버그가 있는지 찾는 코드라고 생각하면 조금 부족하다.테스트에는 중요한 역할이 세 가지 있다. 첫째, 내가 작성한 코드가 요구사항을 지키는지 확인한다.요구사항이 "재고가 10일 때 하나를 판매하면 재고는 9가 된다." 일 경우,테스트는 10 → 1개 판매 → 9인지 확인 절차로 수행한다. 둘째, ..
[TDD] 좋은 테스트란 무엇인가
2026.08.19
다음과 같은 코드를 만들었다고 생각해보자.상품 재고 = 10사용자가 상품 하나를 구매했다. 이때 원하는 결과는 무엇일까?상품 재고 = 9그러면 프로그램을 작성한 뒤 사람이 매번 실행해서 9가 됐는지 확인할 수도 있다.하지만 코드가 커지면 이 방법은 불가능해진다. 그래서 테스트 코드가 대신 확인한다.초기 재고가 10이고↓상품 하나를 판매했을 때↓남은 재고는 9여야 한다. 1. 테스트는 왜 작성할까?테스트를 단순히 버그가 있는지 찾는 코드라고 생각하면 조금 부족하다.테스트에는 중요한 역할이 세 가지 있다. 첫째, 내가 작성한 코드가 요구사항을 지키는지 확인한다.요구사항이 "재고가 10일 때 하나를 판매하면 재고는 9가 된다." 일 경우,테스트는 10 → 1개 판매 → 9인지 확인 절차로 수행한다. 둘째, ..
[TDD] 좋은 테스트란 무엇인가
2026.08.19
다음과 같은 코드를 만들었다고 생각해보자.상품 재고 = 10사용자가 상품 하나를 구매했다. 이때 원하는 결과는 무엇일까?상품 재고 = 9그러면 프로그램을 작성한 뒤 사람이 매번 실행해서 9가 됐는지 확인할 수도 있다.하지만 코드가 커지면 이 방법은 불가능해진다. 그래서 테스트 코드가 대신 확인한다.초기 재고가 10이고↓상품 하나를 판매했을 때↓남은 재고는 9여야 한다. 1. 테스트는 왜 작성할까?테스트를 단순히 버그가 있는지 찾는 코드라고 생각하면 조금 부족하다.테스트에는 중요한 역할이 세 가지 있다. 첫째, 내가 작성한 코드가 요구사항을 지키는지 확인한다.요구사항이 "재고가 10일 때 하나를 판매하면 재고는 9가 된다." 일 경우,테스트는 10 → 1개 판매 → 9인지 확인 절차로 수행한다. 둘째, ..
[TDD] 좋은 테스트란 무엇인가
2026.08.19
다음과 같은 코드를 만들었다고 생각해보자.상품 재고 = 10사용자가 상품 하나를 구매했다. 이때 원하는 결과는 무엇일까?상품 재고 = 9그러면 프로그램을 작성한 뒤 사람이 매번 실행해서 9가 됐는지 확인할 수도 있다.하지만 코드가 커지면 이 방법은 불가능해진다. 그래서 테스트 코드가 대신 확인한다.초기 재고가 10이고↓상품 하나를 판매했을 때↓남은 재고는 9여야 한다. 1. 테스트는 왜 작성할까?테스트를 단순히 버그가 있는지 찾는 코드라고 생각하면 조금 부족하다.테스트에는 중요한 역할이 세 가지 있다. 첫째, 내가 작성한 코드가 요구사항을 지키는지 확인한다.요구사항이 "재고가 10일 때 하나를 판매하면 재고는 9가 된다." 일 경우,테스트는 10 → 1개 판매 → 9인지 확인 절차로 수행한다. 둘째, ..
[TDD] 좋은 테스트란 무엇인가
2026.08.19
다음과 같은 코드를 만들었다고 생각해보자.상품 재고 = 10사용자가 상품 하나를 구매했다. 이때 원하는 결과는 무엇일까?상품 재고 = 9그러면 프로그램을 작성한 뒤 사람이 매번 실행해서 9가 됐는지 확인할 수도 있다.하지만 코드가 커지면 이 방법은 불가능해진다. 그래서 테스트 코드가 대신 확인한다.초기 재고가 10이고↓상품 하나를 판매했을 때↓남은 재고는 9여야 한다. 1. 테스트는 왜 작성할까?테스트를 단순히 버그가 있는지 찾는 코드라고 생각하면 조금 부족하다.테스트에는 중요한 역할이 세 가지 있다. 첫째, 내가 작성한 코드가 요구사항을 지키는지 확인한다.요구사항이 "재고가 10일 때 하나를 판매하면 재고는 9가 된다." 일 경우,테스트는 10 → 1개 판매 → 9인지 확인 절차로 수행한다. 둘째, ..
Java
클래스, 객체, 인스턴스
2022.09.05
Java
클래스, 객체, 인스턴스
2022.09.05
클래스 - 설계도. 예를 들면 모니터나 휴대폰의 구조나 특성, 기능 등을 정의해 놓은 것 - 메서드와 변수들의 집합 객체 - 실제로 존재하는 것이라고 할 수 있다. 모니터, 휴대폰과 같은 사물들이 곧 객체이다. - 아직은 어떠한 메모리도 차지하지 않는 상태이다. - 인스턴스보다 포괄적인 의미로 사용 인스턴스 - 클래스로부터 만들어진 객체. - 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함. public class Main { //클래스 public static void main(String[] args) { int num; //객체 Calculator cal = new Calculator(); //인스턴스화 } }
클래스, 객체, 인스턴스
2022.09.05
클래스 - 설계도. 예를 들면 모니터나 휴대폰의 구조나 특성, 기능 등을 정의해 놓은 것 - 메서드와 변수들의 집합 객체 - 실제로 존재하는 것이라고 할 수 있다. 모니터, 휴대폰과 같은 사물들이 곧 객체이다. - 아직은 어떠한 메모리도 차지하지 않는 상태이다. - 인스턴스보다 포괄적인 의미로 사용 인스턴스 - 클래스로부터 만들어진 객체. - 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함. public class Main { //클래스 public static void main(String[] args) { int num; //객체 Calculator cal = new Calculator(); //인스턴스화 } }
💙
클래스, 객체, 인스턴스
2022.09.05
2022.09.05
클래스 - 설계도. 예를 들면 모니터나 휴대폰의 구조나 특성, 기능 등을 정의해 놓은 것 - 메서드와 변수들의 집합 객체 - 실제로 존재하는 것이라고 할 수 있다. 모니터, 휴대폰과 같은 사물들이 곧 객체이다. - 아직은 어떠한 메모리도 차지하지 않는 상태이다. - 인스턴스보다 포괄적인 의미로 사용 인스턴스 - 클래스로부터 만들어진 객체. - 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함. public class Main { //클래스 public static void main(String[] args) { int num; //객체 Calculator cal = new Calculator(); //인스턴스화 } }
클래스, 객체, 인스턴스
2022.09.05
클래스 - 설계도. 예를 들면 모니터나 휴대폰의 구조나 특성, 기능 등을 정의해 놓은 것 - 메서드와 변수들의 집합 객체 - 실제로 존재하는 것이라고 할 수 있다. 모니터, 휴대폰과 같은 사물들이 곧 객체이다. - 아직은 어떠한 메모리도 차지하지 않는 상태이다. - 인스턴스보다 포괄적인 의미로 사용 인스턴스 - 클래스로부터 만들어진 객체. - 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함. public class Main { //클래스 public static void main(String[] args) { int num; //객체 Calculator cal = new Calculator(); //인스턴스화 } }
클래스, 객체, 인스턴스
2022.09.05
클래스 - 설계도. 예를 들면 모니터나 휴대폰의 구조나 특성, 기능 등을 정의해 놓은 것 - 메서드와 변수들의 집합 객체 - 실제로 존재하는 것이라고 할 수 있다. 모니터, 휴대폰과 같은 사물들이 곧 객체이다. - 아직은 어떠한 메모리도 차지하지 않는 상태이다. - 인스턴스보다 포괄적인 의미로 사용 인스턴스 - 클래스로부터 만들어진 객체. - 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함. public class Main { //클래스 public static void main(String[] args) { int num; //객체 Calculator cal = new Calculator(); //인스턴스화 } }
클래스, 객체, 인스턴스
2022.09.05
클래스 - 설계도. 예를 들면 모니터나 휴대폰의 구조나 특성, 기능 등을 정의해 놓은 것 - 메서드와 변수들의 집합 객체 - 실제로 존재하는 것이라고 할 수 있다. 모니터, 휴대폰과 같은 사물들이 곧 객체이다. - 아직은 어떠한 메모리도 차지하지 않는 상태이다. - 인스턴스보다 포괄적인 의미로 사용 인스턴스 - 클래스로부터 만들어진 객체. - 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함. public class Main { //클래스 public static void main(String[] args) { int num; //객체 Calculator cal = new Calculator(); //인스턴스화 } }
클래스, 객체, 인스턴스
2022.09.05
클래스 - 설계도. 예를 들면 모니터나 휴대폰의 구조나 특성, 기능 등을 정의해 놓은 것 - 메서드와 변수들의 집합 객체 - 실제로 존재하는 것이라고 할 수 있다. 모니터, 휴대폰과 같은 사물들이 곧 객체이다. - 아직은 어떠한 메모리도 차지하지 않는 상태이다. - 인스턴스보다 포괄적인 의미로 사용 인스턴스 - 클래스로부터 만들어진 객체. - 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함. public class Main { //클래스 public static void main(String[] args) { int num; //객체 Calculator cal = new Calculator(); //인스턴스화 } }
Spring
로그인 기능 만들기
2022.05.16
Spring
로그인 기능 만들기
2022.05.16
JSP를 이용해 아주 간단한 로그인 기능을 만들어보자.로그인페이지(login), 로그인결과를 처리할 loginResult 페이지, 로그인 성공시 넘어갈 mypage, 로그아웃을 처리할 logout 페이지 총 네개의 페이지를 만든다. 우선 가장 메인이 될, 로그인 페이지를 만든다.123456789101112131415161718192021222324252627282930313233343536@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>!DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title here/title>style> table,t..
로그인 기능 만들기
2022.05.16
JSP를 이용해 아주 간단한 로그인 기능을 만들어보자.로그인페이지(login), 로그인결과를 처리할 loginResult 페이지, 로그인 성공시 넘어갈 mypage, 로그아웃을 처리할 logout 페이지 총 네개의 페이지를 만든다. 우선 가장 메인이 될, 로그인 페이지를 만든다.123456789101112131415161718192021222324252627282930313233343536@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>!DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title here/title>style> table,t..
💙
로그인 기능 만들기
2022.05.16
2022.05.16
JSP를 이용해 아주 간단한 로그인 기능을 만들어보자.로그인페이지(login), 로그인결과를 처리할 loginResult 페이지, 로그인 성공시 넘어갈 mypage, 로그아웃을 처리할 logout 페이지 총 네개의 페이지를 만든다. 우선 가장 메인이 될, 로그인 페이지를 만든다.123456789101112131415161718192021222324252627282930313233343536@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>!DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title here/title>style> table,t..
로그인 기능 만들기
2022.05.16
JSP를 이용해 아주 간단한 로그인 기능을 만들어보자.로그인페이지(login), 로그인결과를 처리할 loginResult 페이지, 로그인 성공시 넘어갈 mypage, 로그아웃을 처리할 logout 페이지 총 네개의 페이지를 만든다. 우선 가장 메인이 될, 로그인 페이지를 만든다.123456789101112131415161718192021222324252627282930313233343536@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>!DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title here/title>style> table,t..
로그인 기능 만들기
2022.05.16
JSP를 이용해 아주 간단한 로그인 기능을 만들어보자.로그인페이지(login), 로그인결과를 처리할 loginResult 페이지, 로그인 성공시 넘어갈 mypage, 로그아웃을 처리할 logout 페이지 총 네개의 페이지를 만든다. 우선 가장 메인이 될, 로그인 페이지를 만든다.123456789101112131415161718192021222324252627282930313233343536@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>!DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title here/title>style> table,t..
로그인 기능 만들기
2022.05.16
JSP를 이용해 아주 간단한 로그인 기능을 만들어보자.로그인페이지(login), 로그인결과를 처리할 loginResult 페이지, 로그인 성공시 넘어갈 mypage, 로그아웃을 처리할 logout 페이지 총 네개의 페이지를 만든다. 우선 가장 메인이 될, 로그인 페이지를 만든다.123456789101112131415161718192021222324252627282930313233343536@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>!DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title here/title>style> table,t..
로그인 기능 만들기
2022.05.16
JSP를 이용해 아주 간단한 로그인 기능을 만들어보자.로그인페이지(login), 로그인결과를 처리할 loginResult 페이지, 로그인 성공시 넘어갈 mypage, 로그아웃을 처리할 logout 페이지 총 네개의 페이지를 만든다. 우선 가장 메인이 될, 로그인 페이지를 만든다.123456789101112131415161718192021222324252627282930313233343536@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>!DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title here/title>style> table,t..
Java
자바로 1:1 채팅하기
2022.05.12
Java
자바로 1:1 채팅하기
2022.05.12
db를 했다가 자바를 했다가 왔다갔다 천방지축 어리둥절 빙글빙글 돌아가는 검정콩의 하루... 드디어 네트워크를 공부하게 되는데.... 과연 초코딩에 네트워크 게시글을 쓸 수 있을까? 오늘 공부한 내용은 자바로 1:1 채팅 코드를 짜는 것으로... 클래스를 4개나 만들어야해서 열받지만 다 짜고 채팅을 쳐보면 내가해냄! 을 외칠 수 있다. 우선 클라이언트와 서버를 먼저 만들고, 서버와 클라이언트가 메시지를 보내는 기능을 수행하는 sender 스레드와 메시지를 받는 기능을 수행하는 receiver 스레드를 생성해준다. 소켓을 생성한 뒤 소켓정보를 받아 sender와 receiver 스레드에 넣어 메시지 보내기와 받기를 동시에 처리한다. - Server 서버소켓을 만들고(포트번호 7777을 개방했다) 접속요청이..
자바로 1:1 채팅하기
2022.05.12
db를 했다가 자바를 했다가 왔다갔다 천방지축 어리둥절 빙글빙글 돌아가는 검정콩의 하루... 드디어 네트워크를 공부하게 되는데.... 과연 초코딩에 네트워크 게시글을 쓸 수 있을까? 오늘 공부한 내용은 자바로 1:1 채팅 코드를 짜는 것으로... 클래스를 4개나 만들어야해서 열받지만 다 짜고 채팅을 쳐보면 내가해냄! 을 외칠 수 있다. 우선 클라이언트와 서버를 먼저 만들고, 서버와 클라이언트가 메시지를 보내는 기능을 수행하는 sender 스레드와 메시지를 받는 기능을 수행하는 receiver 스레드를 생성해준다. 소켓을 생성한 뒤 소켓정보를 받아 sender와 receiver 스레드에 넣어 메시지 보내기와 받기를 동시에 처리한다. - Server 서버소켓을 만들고(포트번호 7777을 개방했다) 접속요청이..
💙
자바로 1:1 채팅하기
2022.05.12
2022.05.12
db를 했다가 자바를 했다가 왔다갔다 천방지축 어리둥절 빙글빙글 돌아가는 검정콩의 하루... 드디어 네트워크를 공부하게 되는데.... 과연 초코딩에 네트워크 게시글을 쓸 수 있을까? 오늘 공부한 내용은 자바로 1:1 채팅 코드를 짜는 것으로... 클래스를 4개나 만들어야해서 열받지만 다 짜고 채팅을 쳐보면 내가해냄! 을 외칠 수 있다. 우선 클라이언트와 서버를 먼저 만들고, 서버와 클라이언트가 메시지를 보내는 기능을 수행하는 sender 스레드와 메시지를 받는 기능을 수행하는 receiver 스레드를 생성해준다. 소켓을 생성한 뒤 소켓정보를 받아 sender와 receiver 스레드에 넣어 메시지 보내기와 받기를 동시에 처리한다. - Server 서버소켓을 만들고(포트번호 7777을 개방했다) 접속요청이..
자바로 1:1 채팅하기
2022.05.12
db를 했다가 자바를 했다가 왔다갔다 천방지축 어리둥절 빙글빙글 돌아가는 검정콩의 하루... 드디어 네트워크를 공부하게 되는데.... 과연 초코딩에 네트워크 게시글을 쓸 수 있을까? 오늘 공부한 내용은 자바로 1:1 채팅 코드를 짜는 것으로... 클래스를 4개나 만들어야해서 열받지만 다 짜고 채팅을 쳐보면 내가해냄! 을 외칠 수 있다. 우선 클라이언트와 서버를 먼저 만들고, 서버와 클라이언트가 메시지를 보내는 기능을 수행하는 sender 스레드와 메시지를 받는 기능을 수행하는 receiver 스레드를 생성해준다. 소켓을 생성한 뒤 소켓정보를 받아 sender와 receiver 스레드에 넣어 메시지 보내기와 받기를 동시에 처리한다. - Server 서버소켓을 만들고(포트번호 7777을 개방했다) 접속요청이..
자바로 1:1 채팅하기
2022.05.12
db를 했다가 자바를 했다가 왔다갔다 천방지축 어리둥절 빙글빙글 돌아가는 검정콩의 하루... 드디어 네트워크를 공부하게 되는데.... 과연 초코딩에 네트워크 게시글을 쓸 수 있을까? 오늘 공부한 내용은 자바로 1:1 채팅 코드를 짜는 것으로... 클래스를 4개나 만들어야해서 열받지만 다 짜고 채팅을 쳐보면 내가해냄! 을 외칠 수 있다. 우선 클라이언트와 서버를 먼저 만들고, 서버와 클라이언트가 메시지를 보내는 기능을 수행하는 sender 스레드와 메시지를 받는 기능을 수행하는 receiver 스레드를 생성해준다. 소켓을 생성한 뒤 소켓정보를 받아 sender와 receiver 스레드에 넣어 메시지 보내기와 받기를 동시에 처리한다. - Server 서버소켓을 만들고(포트번호 7777을 개방했다) 접속요청이..
자바로 1:1 채팅하기
2022.05.12
db를 했다가 자바를 했다가 왔다갔다 천방지축 어리둥절 빙글빙글 돌아가는 검정콩의 하루... 드디어 네트워크를 공부하게 되는데.... 과연 초코딩에 네트워크 게시글을 쓸 수 있을까? 오늘 공부한 내용은 자바로 1:1 채팅 코드를 짜는 것으로... 클래스를 4개나 만들어야해서 열받지만 다 짜고 채팅을 쳐보면 내가해냄! 을 외칠 수 있다. 우선 클라이언트와 서버를 먼저 만들고, 서버와 클라이언트가 메시지를 보내는 기능을 수행하는 sender 스레드와 메시지를 받는 기능을 수행하는 receiver 스레드를 생성해준다. 소켓을 생성한 뒤 소켓정보를 받아 sender와 receiver 스레드에 넣어 메시지 보내기와 받기를 동시에 처리한다. - Server 서버소켓을 만들고(포트번호 7777을 개방했다) 접속요청이..
자바로 1:1 채팅하기
2022.05.12
db를 했다가 자바를 했다가 왔다갔다 천방지축 어리둥절 빙글빙글 돌아가는 검정콩의 하루... 드디어 네트워크를 공부하게 되는데.... 과연 초코딩에 네트워크 게시글을 쓸 수 있을까? 오늘 공부한 내용은 자바로 1:1 채팅 코드를 짜는 것으로... 클래스를 4개나 만들어야해서 열받지만 다 짜고 채팅을 쳐보면 내가해냄! 을 외칠 수 있다. 우선 클라이언트와 서버를 먼저 만들고, 서버와 클라이언트가 메시지를 보내는 기능을 수행하는 sender 스레드와 메시지를 받는 기능을 수행하는 receiver 스레드를 생성해준다. 소켓을 생성한 뒤 소켓정보를 받아 sender와 receiver 스레드에 넣어 메시지 보내기와 받기를 동시에 처리한다. - Server 서버소켓을 만들고(포트번호 7777을 개방했다) 접속요청이..
🎵 Playlist
loading...
00:00 / 00:00