서버는 OS에 의해 동작하는 프로세스이며 클라이언트의 역할을 하는 프로세스와 소켓을 통해 IPC를 수행하는 것
컴퓨터가 네트워크 상에서 통신을 하기 위해서는 수많은 정보의 바다에서 자신이 누구인지
유일하게 식별이 가능한 수단
Application Programming Interface
= 프로그램을 사용할 때 이용되는 인터페이스
HTTP를 기반으로 하는 웹 서비스 아키텍처
HTTP 메소드와 자원을 이용해 서로 간의 통신을 주고받는 방법(POST, GET, PUT, PATCH, DELETE)
REST API에서 API Endpoint는 해당 API를 호출하기 위한 HTTP 메소드, 그리고 URL을 포함
이제 RESTful한 API의 설계를 위한 규칙 - 방학 매칭 프로젝트 때 큰 도움
RESTful한 API의 Endpoint는 아래의 규칙에 따라 설계
요청을 보낼 때 추가적으로 보낼 요소들(id, 파라미터 등)을 어떻게 보낼까??
자주 쓰는 종속성 라이브러리들
Lombok(필수) - 코딩 관련 편의성 → 어노테이션
Spring Web(필수) - 웹 애플리케이션 개발 프레임워크
Spring Data JPA(데이터 접근)
H2/MySQL (데이터베이스 관리)
Spring Security(로그인할 때 무조건 씀)
OAuth2(소셜로그인 할 때 사용)
build.gradle 파일에서 추가/삭제 가능(버전/호출명 구글링 필요)
**/resources/application.properties
**/resources/application.yml
**/resources/application-common.yml
**/resources/application-db.yml 주로 /resources 속에 많이 들어가므로 디렉토리 전체를 넣어줘도 상관없을듯?모듈형(도메인형) 구조
|-- domain
| |-- user
| | |-- controller
| | |-- repository
| | |-- service
| |
| |-- post
| | |-- controller
| | |-- entity
|--global
| |-- configuration
| |-- utils
| |-- jwt
계층형 구조
|-- controller
|-- UserController.java
|-- PostController.java
|-- service
|-- repository
클래스 이름: 대문자로 시작하는 카멜케이스 사용 (e.g., UserService)
메서드 이름: 소문자로 시작하는 카멜케이스 사용 (e.g., getUserById)
변수 이름: 소문자로 시작하는 카멜케이스 사용 (e.g., totalAmount, userList)
상수 이름: 모두 대문자와 언더스코어 사용 (e.g., MAX_COUNT)
패키지 이름: 모두 소문자 (e.g., com.example.project.service)
메서드 주석: 각 메서드가 하는 일, 파라미터, 리턴 값 등을 설명
클래스 주석: 클래스의 책임과 주요 작동 방식 설명
인라인 주석: 코드 로직이 복잡하거나 주의가 필요할 때 사용
예외 처리 방법 (e.g., 커스텀 예외 사용, 예외 전파 방식)
로그 레벨과 로그 메시지 포맷
단위 테스트 작성 여부와 범위
테스트 메서드의 네이밍 컨벤션
브랜치 전략 (e.g., Git Flow, GitHub Flow)
커밋 메시지 규칙
본래의 프로그램 로직에는 직접적인 영향을 주지 않지만, 프로그램이 어떻게 동작해야 하는지에 대한 추가적인 정보를 제공 - 메타데이터 **@Annotation** 의 형태
@Bean: 특정 메소드의 반환값을 Spring 컨테이너에 빈(Bean)으로 등록@Configuration 클래스 내에서 사용@Service: 클래스를 Spring의 서비스 빈으로 등록@Controller / @RestController: 해당 클래스가 웹 요청을 처리하는 컨트롤러 역할을 하는 빈으로 등록@RestController는 자동으로 @ResponseBody가 적용되어 반환값을 JSON 등으로 자동 변환@Autowired: 멤버 변수나 메소드 레벨에서 사용되며, Spring 컨테이너에서 해당 타입의 빈을 자동으로 주입@Component: 클래스 레벨에서 사용되며, 해당 클래스를 Spring 컨테이너에 빈으로 등록@Service, @Controller, @Repository 등은 @Component를 특화한 형태@AuthenticationPrincipal: Spring Security관련 어노테이션으로, 사용자의 인증정보(UserDetails)를 더 쉽게 활용할 수 있게 함@Entity: 클래스의 인스턴스가 JPA에서 엔터티 객체임을 명시 이 어노테이션이 붙은 클래스는 데이터베이스의 테이블과 매핑됨@Id: 변수가 엔터티의 기본 키(primary key)@GeneratedValue: 주로 @Id와 함께 사용되며, 기본 키의 생성 전략 포함@Column: 변수가 데이터베이스의 특정 컬럼과 매핑됨@Table: 엔터티 클래스와 매핑될 데이터베이스 테이블의 이름을 명시 - 없어도 큰 문제는 없음@Builder: 빌더 패턴을 자동으로 구현**@Getter**: getter 메서드 자동 생성**@Setter**: setter 메서드 자동 생성**@NoArgsContructor**: 매개변수가 없는 기본 생성자를 자동으로 생성@AllArgsConstructor: 클래스의 모든 필드에 대한 생성자를 자동으로 생성@RequiredArgsConstructor: final 이 붙은 필드에 대한 생성자를 자동으로 생성