@Service와 @Repository 애너테이션은 스프링 프레임워크에서 각각 서비스 계층과 데이터 접근 계층을 표현하는 데 사용된다. 이 두 애너테이션은 기능적으로 차이가 있을 뿐만 아니라, 내부 구조와 목적에서도 차이를 보인다. 결론부터 말하자면 두 애너테이션 모두 내부적으로는 @Component 애너테이션을 포함하고 있다. 그러나 @Repository는 추가적으로 데이터 접근 예외를 일관된 방식으로 처리하기 위한 예외 변환 기능을 제공한다. 이를 통해 애플리케이션은 더 구조적이고 명확하게 계층을 나눌 수 있으며, 각각의 역할에 맞는 클래스를 정의할 수 있다. 이러한 구분은 코드의 가독성과 유지보수성을 높이는 데 기여한다. @Service @Service 애너테이션은 비즈니스 로직을 구현하는..
@Controller와 @RestController 애너테이션은 스프링 프레임워크에서 웹 애플리케이션 개발 시 주로 사용되는 애너테이션이다. 이 두 애너테이션은 모두 클래스를 스프링 MVC 컨트롤러로 선언하지만, 그 동작 방식에는 중요한 차이가 존재한다. @Controller @Controller 애너테이션은 스프링 MVC의 전통적인 컨트롤러를 정의하는 데 사용된다. 이 애너테이션은 주로 뷰(View) 템플릿을 반환할 때 사용된다. @Controller 클래스 내의 메서드는 주로 JSP, Thymeleaf와 같은 템플릿 엔진을 통해 HTML 페이지를 반환한다. 뷰 리졸버(View Resolver)를 통해 뷰 이름을 해석하고 해당하는 HTML 페이지를 렌더링한다.@Controller는 기본적으로 뷰 리..
접근 제어자(Access Modifier)는 객체 지향 프로그래밍에서 클래스, 메서드, 변수 등의 접근 수준을 제어하기 위해 사용되는 키워드이다. 접근 제어자를 통해 외부에서 해당 멤버에 접근할 수 있는 범위를 지정할 수 있다. 이를 통해 데이터 캡슐화와 정보 은닉을 실현할 수 있으며, 자바에서는 주로 네 가지 접근 제어자가 있다. public접근 범위: 모든 클래스설명: public으로 선언된 멤버는 모든 클래스에서 접근 가능하다. 패키지나 클래스에 상관없이 어디서든 접근할 수 있다. protected 접근 범위: 동일 패키지, 서브클래스설명: protected로 선언된 멤버는 같은 패키지 내의 다른 클래스와 다른 패키지에 있는 서브클래스에서 접근 가능하다. 즉, 상속을 통해 접근 범위를 넓힐 수 있..
목차 자바에는 일반적으로 쓰이는 String 클래스 말고도 두 가지 클래스가 더 존재한다. 똑같이 문자열을 저장 및 관리하는 클래스가 왜 세 가지나 있을까? 차이점을 간결하게 정리하자. String vs. String Buffer / Builder String - 한 번 생성되면 할당된 메모리 주소가 변하지 않는다. '+' 혹은 concat() 메서드를 사용해 문자열을 추가하면 기존 메모리주소에 이어서 할당되는 것이 아닌 문자열이 추가된 새로운 문자열을 생성해 저장한다. 이때 힙 메모리엔 기존의 문자열이 Garbage로 남아 GC에 의해 회수되기 전까지 메모리를 차지하는데, 문자열의 수정이 자주 발생한다면 계속해서 Garbage가 쌓이게 된다. 이를 불변(immutable) 하다고 한다. 굳이 왜 이런 ..
지난 글에서 스키마 정제와 DB 정규화에 대해 정리하다 키(Key)에 대해서도 언급했다. 한 마디로 정의하자면 키란 테이블의 식별자 기능을 할 수 있는 하나 이상의 컬럼의 집합을 말하며, 조금 구체적으로는 아래와 같이 구분할 수 있다. 슈퍼키 - 테이블의 각 행을 유일하게 식별할 수 있는 하나 이상의 컬럼의 집합이다. 유일성을 만족한다. 후보키 - 슈퍼키 중에서 최소성을 만족하는 컬럼의 집합이다. 기본키 - 후보키 중 하나로 최소성과 유일성을 만족하는 컬럼이다. 테이블 별로 오직 하나만 지정할 수 있다. 추가로 null값을 가질 수 없고, 당연히 중복된 값을 가질 수도 없다. 대체키 - 기본키로 선택되지 않은 후보키를 말한다. 기본키와 동일한 속성을 지니며 대체도 가능하다. 이중 보통 내가 만나는 아이는..
목차 이번엔 컴퓨터의 전원 버튼을 누르면 정확히 어떤 일이 벌어질까? 에 대한 대답을 정리하려 한다. 먼저 부팅(Booting)을 한 마디로 정의하면 컴퓨터가 자기 자신을 구동할 프로그램을 불러오는 과정이다. 대략적으로 다음과 같은 순서를 따른다. Power On 전원 스위치를 누르면 전류가 파워 서플라이로 전달된다. 파워 서플라이는 내부의 칩이 전압이 정상이고 안정적으로 공급된다고 판정하면 Power Good Signal을 발송한다. 이어서 파워 서플라이는 전원을 컴퓨터 내부에서 사용되는 전압으로 변환해 메인보드를 시작으로 CPU, 메모리, 디스크 등에 전력을 공급한다. 이 과정에서 CPU로 보내지던 리셋 신호가 중지되고 CPU가 초기화되며, 그렇지 않을 경우 전원은 들어오지만 화면에 아무것도 표시되지..
목차 브라우저에서 요청을 보내거나 링크를 클릭하면 내부적으로 어떤 일이 일어날까? 에 대한 대답을 (하드웨어 쪽은 제외하고) 정리해 두려고 한다. 예를 들어 https://google.com으로 접근하길 원한다고 치자. 이때 앱의 내부는 다음과 같이 동작한다. Type https://google.com and press Enter Protocol https:// 는 통신 규약으로 Hypertext Transfer Protocol Secure의 약자이다. 데이터를 안전하게 전송하기 위해 기존의 HTTP에 TLS가 적용되어 있다. Domain google.com 은 웹 사이트의 도메인이다. 실제 IP 주소와 연결된 기억하기 쉬운 이름이라고 생각하면 편하다. 위 그림에서 볼 수 있듯이 리소스의 위치를 나타내는..
목차 DB 설계에서 시작해 제법 멀리도 왔다. 시작점이 안 보여. 어쨌거나 DB는 한 번 잘못 설계하면 그 알아채는 타이밍이 늦을수록 돈이 들어간다. 게다가 만약 그 설계가 데이터 무결성을 무너뜨리는 것을 모자라 데이터 보안까지 위협한다? 돈으로 해결되면 다행일 것이다. 반면 당연하게도 안정적이고 성능 좋은 DB를 설계한다면 여러 비용을 절약할 수 있다. DB 설계의 세 번째 단계인 논리적 설계에서 시작해 데이터 무결성과 그 제약조건을 거쳐 여기까지 왔다. 이 글에선 DB 설계 시 개발자가 기본적으로 알아야 할, 효율적인 디자인에 대해 다룬다. 그럼 여기서 먼저, DB의 효율성이란 무엇일까? 당연히 삽입/갱신/삭제/조회의 비용이 적은 것을 말한다. 그럼 이어서, DB의 효율성을 가장 많이 해치는 근본적인..
Data Integrity 데이터 무결성은 데이터의 생애주기 동안 정확성과 일관성을 보장하고 관리하는 것을 말한다. 당연하게도 DB를 설계 및 구현할 때 최우선 순위로 확보해야 할 가치이며, 반대말로 'Data Corruption'이 있다. 여기서 정확성과 일관성이란 쉽게 말하면 언제나 의도한 대로 데이터가 저장되어야 하고 추후 복구나 조회 시 처음 상태와 같아야 한다는 뜻이며, 한 마디로 줄이자면 의도치 않은 데이터의 변경을 막는 것을 말한다. 계속해서 데이터 무결성은 두 가지 계층으로 나뉘는데, 짧게 요약하면 아래와 같다. 물리적 무결성(Physical Integrity) 실제 데이터를 안전하게 저장하고 불러오는 것에 대한 무결성 디자인 결함과 휴먼 에러에서 발생할 수 있음 물리적 저장장소를 각종 예..
목차 Principles 설계 자체에 들어가기에 앞서, 좋은 DB 설계란 지켜야 할 몇 가지 원칙이 존재한다. 하나의 거대한 테이블이 아닌 주제에 맞는 여러 개의 테이블로 분할할 것 하나의 테이블 안의 각 필드는 유일한 정보를 가질 것 - 중복 데이터 및 그룹 제거 같은 데이터를 가리키는 필드명은 다른 테이블에서도 동일할 것 각 테이블은 반드시 PK를 가질 것 - 중복 데이터 방지 및 조회 속도 향상 테이블 간 연관관계에 FK를 사용할 것 - 중복 데이터 및 매핑 실수 방지 필드 독립성 - 특정 필드 값의 변화가 다른 필드에 영향을 주지 않을 것 데이터 무결성을 포함하는 위와 같은 원칙을 바탕으로 DB 설계는 총 다섯 단계로 나눌 수 있는데, 이를 정리하면 아래와 같다. 사용자의 요구조건 분석(Requi..
- Total
- Today
- Yesterday
- 세계여행
- 남미
- Algorithm
- 지지
- 백준
- spring
- 기술면접
- 세계일주
- 파이썬
- 자바
- Python
- 맛집
- 유럽여행
- 면접 준비
- RX100M5
- 여행
- 리스트
- BOJ
- java
- 유럽
- 세모
- a6000
- 칼이사
- 스프링
- Backjoon
- 중남미
- 동적계획법
- 스트림
- 야경
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |