일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- deleteById
- springboot
- 디자인 패턴
- 이펙티브 자바
- Connection Pool
- Item04
- db
- 플라이웨이트
- Spring Boot
- NotBlank
- Web
- @ControllerAdvice
- FCM
- Service Locator
- JPA
- Proxy Patter
- @MockBean
- Firebase
- Effetive Java
- Service Locator 패턴
- Effective Java
- @SpyBean
- 데이터베이스
- 트랜잭션
- SQL 삽입 공격
- multi module
- NotEmpty
- java
- @Valid
- restTemplate
- Today
- Total
목록분류 전체보기 (64)
NoTimeForDawdling
오늘은 Primary Key와 Unique Key의 차이에 대해서 알아보겠습니다. Primary Key Primary Key는 해당 테이블의 식별자 역할을 하는 제약 조건으로 테이블에 하나만 설정할 수 있습니다. 다른 레코드들과 서로 다르다는 사실을 확인할 수 있도록 도와주는 역할을 합니다. 즉, 유일성을 보장해 줍니다. 유일성을 보장해주기 위해서는 Unique 해야 하며 NULL이면 안됩니다.(NOT NULL) Unique Key Unique Key는 테이블 내 항상 유일해야 하는 값을 의미합니다. 즉, 중복을 허용하지 않는 컬럼입니다. 유일해야 하는 값은 레코드당 하나일 필요가 없습니다. 즉, 한 테이블에 여러개 설정이 가능합니다. Unique Key는 NULL값이 허용됩니다. 회원 테이블 예제 회원..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/wlNL6/btqYtOPpnyi/yr0DJ8wxGHWgGTEY8tywE1/img.png)
개발을 하다 보면 객체를 복사할 때가 있을 겁니다. 객체의 복사는 얕은 복사와 깊은 복사 두 개념으로 나뉩니다. 단어만 보고 어떤 개념인 것 같은지 느낌이 오시나요?? 어떤 느낌일 것 같은지 생각해 보셨다면 생각한 것과 일치하는지 한번 알아보겠습니다! 얕은 복사란?(Shallow copy) 얕은 복사란 객체의 참조값(주소값)을 복사하는 것을 의미합니다. 복사된 객체는 원본 객체와 같은 주소값을 참조합니다. 그렇기 때문에 복사된 객체의 값이 바뀌면 원본 객체의 값 또한 바뀌게 됩니다. 깊은 복사란?(Deep Copy) 깊은 복사란 객체의 실체 값을 복사하는 것을 의미합니다. 복사될 객체에 새 주소를 할당하여 원본 객체의 모든 값을 복사합니다. 원본 객체의 주소 값을 참조하지 않기 때문에 복사된 객체의 변화..
자바에서 접근 제어자는 정보 은닉을 위해 필수적으로 알고 있어야 할 내용입니다. 그렇다면 접근 제어자가 뭘까요?? 접근 제어자란? 접근 제어자는 변수, 메서드, 클래스 선언 시 사용되며 해당 변수, 메서드, 클래스의 접근 권한을 제어하는 역할을 합니다. 즉, 접근 제어자를 통해 해당 정보를 외부로부터 보호해주기 때문에, 정보 은닉을 구현할 수 있게 도와줍니다. 접근 제어자 종류 접근 제어자의 종류로는 4가지가 있습니다. private: 멤버를 선언한 톱레벨 클래스(해당 클래스)에서만 접근 가능합니다. package-private(default): 멤버가 소속된 패키지 안의 모든 클래스에서 접근할 수 있습니다. protected: package-private의 접근 범위를 포함하며, 이 멤버를 선언한 클래..
Enum Class란? Enum은 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미합니다. Enum의 특징 열거 타입 자체는 클래스입니다. 상수 하나당 자신의 인스턴스를 하나씩 만들어 public static final 필드로 공개합니다. 열거형으로 선언된 순서에 따라 0부터 인덱스 값을 가집니다.(순차적으로 증가) 열거형으로 지정된 상수들은 모두 대문자로 선언해야 합니다. 열거 타입은 밖에서 접근할 수 있는 생성자를 제공하지 않으므로 사실상 final입니다. 따라서 클라이언트가 인스턴스를 직접 생성하거나 확장할 수 없으므로 열거 타입 선언으로 만들어진 인스턴스들은 딱 하나만 존재함이 보장됩니다. Enum의 장점 컴파일타임 타입 안전성을 제공합니다. 열거 타입을 매개변수로 받는 메서드가 있다면, 건..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cMOiS8/btqXXVmQNZO/SI1dFYmN61qMD9n2HkRHK1/img.png)
Spring IoC 컨테이너를 알아보기 전에 스프링 컨테이너가 무엇인지에 대해서 알아보겠습니다. 컨테이너 Servlet 컨테이너 Servlet 컨테이너는 Servlet의 생성, 초기화, 소멸 등 Servelet의 생명주기를 관리합니다. 개발자들이 직접 Servlet을 생성하고 서비스하지 않습니다. EJB 컨테이너 EJB의 생성, 초기화, 소멸 등 EJB의 생명주기를 관리합니다. 컨테이너란? Servlet, EJB 컨테이너와 같이 컨테이너는 보통 인스턴스 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 합니다. 다시 말해, 컨테이너란 프로그래머가 작성한 코드의 처리과정을 위임받은 독립적인 존재입니다. 컨테이너는 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 ..
@PathVariable과 @RequestParam은 모두 HTTP 요청에서 값을 추출하는데 사용되지만 미묘한 차이가 있습니다. 이름에서 알 수 있듯이 @PathVariable은 URL에서 값을 추출하며, @RequestParam은 URL에서 요청 매개 변수를 가져옵니다. 예제 HTTP 요청: http://localhost:8080/shop/order/1001/receipts?date=2020-02-18 @RequstParam: data 매개 변수를 가져올 수 있습니다. @PathVariable: orderId, 즉 "1001"을 추출할 수 있습니다. @GetMapping(value = "/order/{orderId}/receipts") public void exam(@PathVariable("order..
트랜잭션 격리 수준이란? 트랜잭션 격리 수준이란 동시에 여러 트랜잭션이 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지 결하는 것입니다. 즉, 특정 트랜잭션이 다른 트랜잭션에 select, insert, update, delete를 허용할지 말지 결정하는 것입니다. 트랜잭션 격리 수준은 크게 4가지로 나뉩니다. READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 4개의 격리 수준에서 순서대로 뒤로 갈수록 각 트랜잭션 간의 데이터 격리(고립) 정도가 높아지며, 동시성은 떨어집니다.(성능 저하) 일반적인 온라인 서비스에서는 READ COMMITTED와 REPEATABLE READ 둘 중 하나를 많..
데이터베이스를 공부하다 보면 트랜잭션이라는 말을 많이 들어보셨을 겁니다. 지금부터 이 트랜잭션이란 무엇인지 알아보겠습니다. 트랜잭션이란? 트랜잭션이란 데이터베이스의 상태를 변환시키는 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산을 의미합니다. 하나의 연산이라도 잘못되면 지금까지 했던 연산들을 모두 취소해야 합니다. 트랜잭션 필요성 예를 들어, 친구에게 돈을 송금하는 상황을 가정해 보겠습니다. 제 통장에서 10,000원을 차감하고, 친구 통장에 10,000원을 입금하고 있는 사이에 전산 오류가 발생했습니다. 이 오류로 인해 제 통장에서 10,000원이 줄었지만 친구 통장에는 10,000이 들어오지 않는 상황이 발생했습니다. 이러한 경우가 생기지 않도록 중간에 오류가..