자바로 코드를 짜다보면 @override를 많이 보게 된다. 볼 때마다 생각했던 것인데, overriding되 있는거 명시 안해줘도 다 아는데 왜 굳이 써놓았을까? 라는 의문이었다. 

그러다, 이번에 bean에 대해 배우면서 @(어노테이션) 을 많이 보게 되었다. 이 포스팅에서는 어노테이션이 무엇인지에 대해 알아본다. 


Annotation

= 컴파일러와 개발자에게 추가적인 정보를 제공하는 메타데이터

프로그램 코드의 일부가 아닌, 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법

 

<사용 이유>

  1. 컴파일러 체크
    예를 들어, @Override를 붙이면 컴파일러가 해당 메서드가 상위 클래스나 인터페이스의 메서드를 올바르게 오버라이딩 하고 있는지 검사
    오타나 시그니처가 틀릴 시. 컴파일 오류를 발생
  2. 가독성 및 문서화
    코드의 의도를 명확하게 표현하여 역할을 바로 알 수 있음
    → 유지보수와 협업에 도움이 됨
  3. 부가 기능 제공
    Spring, JPA 등 다양한 프레임워크에서는 어노테이션을 활용하여 런타임에 객체를 자동으로 생성하거나 특정 동작을 수행하도록 함

    → 코드를 간결하게 유지 & 복잡한 설정이나 동작을 자동화

 

어노테이션에는 굉장히 많은 종류가 있다. 그 중 잘 쓰이는 몇 가지를 알아보자.

@override

메서드가 슈퍼클래스(또는 인터페이스)의 메서드를 재정의(override)하고 있음을 컴파일러에 알려줌


@SpringBootApplication

Srping Boot를 자동으로 실행시켜주는 어노테이션

Bean을 정의하고 등록하는 3가지 어노테이션을 포함한다.

  • @Configuration: 해당 클래스가 Spring 설정 파일임을 선언합니다.
  • @EnableAutoConfiguration: 미리 정의된 설정들을 바탕으로 자동으로 Bean들을 등록해줍니다.
  • @ComponentScan: 지정된 패키지(기본적으로 현재 클래스가 위치한 패키지 및 하위 패키지) 내의 컴포넌트를 검색하여 Bean으로 등록합니다.
🎀 Spring 설정 파일
    = Bean을 정의 & 구성
    - XML 설정 파일(구 방식)
       스프링 컨테이너에게 어떤 빈들을 어떻게 생성하고 연결할지를 알려주는 설정 리소스
    - Java Config(최신 방식)
       @Configuration과 그 안의 @Bean 메서드들을 사용하면, 해당 메서드들이 반환하는 객체들이 bean으로 등록됨 

 

@ComponentScan

직접 작성한 class를 bean으로 등록

→ value를 이용해 bean의 이름을 지정

@Bean

개발자가 제어 불가한 클래스(ex. 외부 라이브러리)를 bean으로 등록

→ name을 이용해 bean의 이름을 지정


@Controller

Spring MVC의 Controller로 사용되는, 클래스 선언을 단순화 시켜주는 어노테이션

@RestController

Spring에서 Controller 중 View로 응답하지 않는 Controller를 의미한다.

method의 반환 결과를 JSON 형태로 반환한다.

⇒ @Controller + @ResponseBody

 

  🎨 @Controller 💾 @RestController
역할 View와 API를 모두 처리하는 컨트롤러 API 전용 컨트롤러 (데이터만 반환하며, View는 처리 X)
응답 형태 기본적으로 View(HTML 등)를 반환하며, API일 경우 별도로 @ResponseBody 사용 필요 메서드의 반환 값을 JSON이나 XML 등으로 직접 HTTP Response에 담아 반환 (자동 @ResponseBody 적용)
사용 목적 웹 애플리케이션에서 UI 렌더링과 API를 함께 사용할 때 RESTful API 개발 시, View가 필요 없는 데이터 응답에 사용

 

커뮤니티 프로젝트를 진행하며 프론트엔드 개발을 완료한 후, 이제 API를 연동하는 단계입니다.

본 포스팅에서는 API의 개념부터 명세서 작성법, 그리고 실제 예시까지 자세히 알아보자.

 


API

(Application Programming Interface)

소프트웨어 애플리케이션이 서로 통신하여 데이터, 특징 및 기능을 교환할 수 있도록 하는 일련의 규칙 또는 프로토콜

  • 클라이언트와 서버 사이의 요청 및 응답에서 API 통신이 사용된다.
  • API는 이 연결을 설정하는 bridge
  • 어려운 기술을 요하는 기능을 직접 개발하지 않고 편리하게 사용 가능

API 명세서

API에 대한 설명을 자세하게 적어놓은 문서

HTTP Method 종류(GET, POST, PUT, PATCH, DELETE…), 엔드포인트, 데이터, HTTP status 등을 포함한다.

📌 HTTP 주요 메서드 정리

메서드 설명 주요 기능 예시

🔍 GET 서버에서 데이터를 가져올 때 사용 조회(Read) 게시글 목록 가져오기
📩 POST 새로운 데이터를 서버에 추가할 때 사용 생성(Create) 회원가입, 새 글 작성
🛠 PUT 기존 데이터를 완전히 덮어쓸 때 사용 덮어쓰기(Update) 프로필 정보 변경 (전체 수정)
✏️ PATCH 기존 데이터의 일부만 수정할 때 사용 부분 수정(Partial Update) 닉네임 value만 변경하기
DELETE 데이터를 삭제할 때 사용 삭제(Delete) 게시글 삭제, 회원 탈퇴

 

📌 API 설계에서 자주 사용하는 HTTP 상태 코드 정리

상태 코드 의미 설명 예시

200 OK 요청 성공 요청이 정상적으로 처리됨 데이터 조회 성공 (GET)
201 Created 리소스 생성 성공 요청을 처리하고 새로운 리소스를 생성함 회원가입 완료 (POST)
🔄 204 No Content 요청 성공 (응답 본문 없음) 요청이 성공했지만 반환할 데이터가 없음 삭제 완료 (DELETE)
⚠️ 400 Bad Request 잘못된 요청 요청 파라미터가 잘못되었거나 필수 값이 누락됨 필수 입력값 누락
🚫 401 Unauthorized 인증 필요 로그인이 필요한 API에 인증 없이 접근 토큰 없이 사용자 정보 조회 시도
403 Forbidden 권한 없음 권한이 없는 사용자가 접근을 시도함 일반 사용자가 관리자 페이지 접근
🔍 404 Not Found 요청한 리소스 없음 존재하지 않는 URL이나 데이터를 요청함 없는 게시글 조회
🔄 409 Conflict 리소스 충돌 중복된 데이터로 인해 요청이 거부됨 중복된 이메일로 회원가입 시도
⚙️ 500 Internal Server Error 서버 오류 서버 내부에서 예기치 않은 오류 발생 데이터베이스 연결 오류

API 설계도 작성법

<요청>

  1. Request Syntax
      API의 형태, 구조에 대한 정의
    ex) API가 사용하는 메서드 & 요청 URL의 형태 & 코드 예제 제공
  2. Request Header
      요청에 대한 추가 정보
    ex) 메시지의 총 길이, 형식, 인증을 위한 정보 등…
  3. Request Element
      요청의 실제 메시지 (→GET에는 없음)
    ex) 파라미터, 파라미터의 유형, 필수 여부, 설명, 제약 사항 등…

<응답>

  1. Response Element
      API 요청에 대한 결과값 확인
    ex) 성공 여부, 조회 정보

 

 

예시.

 

🌸 환영합니다! 🌸

 

이 곳은 제가 배운 것들을 공유하는 공간입니다! 

💗 개발 공부하면서 배운 것들
💗 프로젝트 이야기들

💗 회고와 작은 이야기들

 


자주 놀러 와 주세요! 🎀💌


이 블로그는 개인 공부 및 기록을 위해 작성되었습니다. 피드백은 언제나 환영합니다.

tailwindCSS를 사용해 보려고 하다가 문득 이게 뭐지? 하는 의문이 들었다.... 정리를 해보자.


Bootstrap

https://getbootstrap.kr/

 

Bootstrap

강력하고 확장 가능하며 기능이 풍부한 프론트엔드 툴킷. Sass로 빌드 및 커스터마이징하고, 사전 빌드된 그리드 시스템 및 구성 요소를 활용하고, 강력한 JavaScript 플러그인으로 프로젝트에 생기

getbootstrap.kr

무료 or 유료로 사용 가능한 미리 만들어진 컴포넌트들을 파는 마켓.

로컬에 설치 후 마켓에 등록되어 있는 클래스 명을 가져와 사용할 수 있다.

  • 컴포넌트 기반: 미리 디자인된 UI 컴포넌트(버튼, 네비게이션, 모달 등)를 제공합니다.
  • 빠른 프로토타이핑: 표준화된 디자인과 컴포넌트를 활용하여 빠르게 웹사이트를 구축할 수 있습니다.
  • 일관된 디자인: 기본 제공하는 스타일 덕분에 전체적인 디자인의 일관성을 쉽게 유지할 수 있습니다.
  • 커스터마이징 한계: 기본 스타일을 재정의하거나 커스터마이징 하려면 CSS나 Sass 변수 등을 수정해야 합니다.
  • 클래스 이름: 컴포넌트 이름 기반의 클래스(예: btn, navbar)를 사용합니다.

Tailwind CSS

https://tailwindcss.com/

작성이 쉽도록 정해놓은 css 규칙을 정의

로컬에 설치 후 사용

  • 유틸리티 우선(Utility-First): 미리 정의된 작은 단위의 클래스들(예: p-4, text-center, bg-blue-500)을 조합하여 디자인합니다.
  • 높은 커스터마이징: 기본 디자인이 거의 없으며, 유틸리티 클래스를 조합해 자유롭게 디자인할 수 있습니다.
  • 재사용성 및 유지보수: 코드의 재사용성과 수정이 용이하지만, 클래스가 HTML 요소에 많이 붙어 길어질 수 있습니다.
  • 퍼포먼스 최적화: PurgeCSS 같은 도구를 이용해 사용하지 않는 CSS를 제거하여 최종 빌드 크기를 줄일 수 있습니다.
  • 개발자 경험: 디자인의 유연성과 커스터마이징을 중시하는 개발자에게 인기가 많습니다.

 

  Bootstrap Tailwind CSS
  미리 디자인된 컴포넌트 기반 유틸리티 클래스 기반
커스터마이징 용이 X(복잡함) O
컴포넌트 다양한 UI 컴포넌트(버튼, 모달 등) 제공 기본 컴포넌트 없음, 직접 조합하여 디자인
개발 속도 FAST FAST
HTML 클래스 의미 중심 클래스 (예: btn, navbar) 기능 중심 클래스 (예: p-4, bg-blue-500)
파일 크기 및 최적화 기본 스타일이 많아 비교적 무거울 수 있음 PurgeCSS로 최적화하여 파일 크기 줄일 수 있음
커뮤니티 및 지원 오랜 기간 사용되어 안정적인 생태계와 문서 제공 최신 트렌드에 맞는 빠른 업데이트와 활발한 커뮤니티

 

'🖌️Frontend > 🎨HTML,CSS,JS' 카테고리의 다른 글

[JS] 웹 컴포넌트  (1) 2025.03.30
[HTML] <img/>의 alt 속성  (0) 2025.03.27
[JS] array의 매서드(forEach, map, filter, reduce)  (0) 2025.02.24
[HTML] 시멘틱 구조 태그  (0) 2025.02.21
[HTML/CSS] html/css  (0) 2025.02.20

+ Recent posts