TIL-25.11.26

이준연·2025년 11월 26일

학습 키워드

  • 트러블 슈팅
  • 프레임워크
  • 라이브러리
  • 데이터베이스
  • AI

트러블 슈팅

Collections의 Value값에 다른 Mock Server 링크 연결로 인한 잘못된 응답.

  • Request Body(POST)
    { "name": "명동교자 본점", "address": "서울 중구 명동10길 29 1층", "call": "02-776-5348", "category": "한식", "rating": 5 }

  • Example Response
    { "id": {{$randomInt}}, "name": "{{$body 'name' ''}}", "address": "{{$body 'address' ''}}", "call": "{{$body 'call' ''}}", "category": "{{$body 'category' ''}}", "rating": "{{$body 'rating' ''}}" }

  • Response
    { "id": 1, "name": "명동교자 본점", "price": , "category": "한식", "description": "", "link": "", "image": "" }

오타로 인한 address값의 상실.

  • Request Body(POST)
    { "name": "명동교자 본점", "address": "서울 중구 명동10길 29 1층", "call": "02-776-5348", "category": "한식", "rating": 5 }

  • Example Response
    { "id": {{$randomInt}}, "name": "{{$body 'name' ''}}", "adress": "{{$body 'address' ''}}", "call": "{{$body 'call' ''}}", "category": "{{$body 'category' ''}}", "rating": "{{$body 'rating' ''}}" }

  • Response
    { "id": 1, "name": "명동교자 본점", "address": "", "call": "02-776-5348", "category": "한식", "rating": 5 }


프레임워크

소프트웨어 개발 시 '뼈대' 또는 '구조' 역할을 하는 도구 모음입니다. 정해진 틀 안에서 개발자들이 공통된 기능을 재사용하고 비즈니스 로직에 더 집중할 수 있도록 돕습니다.

프론트엔드 프레임워크의 핵심 역할

  • 컴포넌트(Component)
    • 재사용이 가능한 각각의 독립된 모듈이다.
      ex) 검색창, 사이드바, 댓글

  • 상태관리(State Management)
    • 상태(State)는 주로 유저 정보나 UI에 영향을 끼치는 동적으로 변화하는 데이터입니다.
      ex) 로그인 여부, 좋아요, 장바구니
    • 상태를 기반으로 한 UI/UX의 설계 및 구현이 주요 목표

백엔드 프레임워크의 핵심 역할

  • 컨트롤러(Controller)

    • 비즈니스 로직과 클라이언트의 요청을 연결해 줍니다.
    • 클라이언트로부터 요청을 받고, 해당 요청에 대해 서비스 레이어에 구현된 적절한 메서드를 호출해서 결과값을 받습니다.
    • 요청과 응답을 전달합니다.
    • <form> 태그에 실어 보낸 데이터를 객체에 담아 받습니다. 그 객체를 DTO(Data Transfer Object)라고 합니다.
    • DTO로 받은 데이터는 최종적으로 데이터베이스(DB, Database)에 저장됩니다.

  • 서비스(Service)

    • 실제 비즈니스 로직을 담당합니다.

      비즈니스 로직이란?
      실제 세상의 규칙, 조건, 절차에 따라 데이터를 처리하고, 생성하고, 저장하는 프로그램의 규칙과 절차를 의미합니다.

    • 리포지토리에게 데이터 저장/조회를 시킵니다.

  • 엔티티(Entity)

    • 서비스가 처리하는 서버 자원을 의미합니다.

  • 리포지토리(Repository)

    • 오직 데이터베이스와 통신하는 역할만을 가집니다.
    • 서비스의 조회/저장 요청에 응답합니다.

    서버의 데이터 흐름

  • 요청(Request)

    1. 클라이언트(Client): JSON 요청을 보냅니다.
    2. 컨트롤러(Controller): 요청에 이상이 없는지 검사합니다.
    3. 컨트롤러(Controller): 받은 DTO를 서비스에게 넘깁니다.

  • 처리(Processing)

    1. 서비스(Service): DTO를 Entiry로 변환합니다.
    2. 서비스(Service): 리포지토리에게 데이터 저장 및 조회를 요청합니다.
    3. 리보지토리(Repository): 데이터베이스에 Entity를 저장 및 조회하고, 최종본을 서비스에 반환합니다.

  • 응답(Response)

    1. 서비스(Service): 저장된 Entity를 DTO로 재변환 시킵니다.
    2. 컨트롤러(Controller): DTO와 응답 코드를 클라이언트에게 반환합니다.

라이브러리

'라이브러리'는 특정 기능을 미리 만들어 둔 코드 모음을 말하며, 소프트웨어 개발 시 필요한 기능을 직접 코딩하는 대신 가져다 사용할 수 있게 해주는 도구입니다.

라이브러리와 프레임워크의 차이점

핵심은 누가 누구를 부르느냐, 즉 제어권이 누구에게 있느냐입니다.

  • 라이브러리(Library):

    • 내가 호출해서 쓰는 도구 모음입니다.
  • 프레임워크(Framework):

    • 프레임워크는 그 스스로 제어 흐름의 주도성을 갖습니다.

라이브러리와 달리 프레임워크는 이미 프로그래밍에 대한 규칙을 가지고 있습니다. 설정파일의 태그설정이나, DB연동 방법등에 대한 규칙을 가지고 있고 개발자는 이를 따라야합니다.


데이터베이스

데이터를 저장하는 것을 넘어, 데이터를 관리하기 위한 전문 시스템(프로그램)입니다.

데이터베이스의 속성

  • 영속성(Durability)
    • 서버를 재시작해도 데이터가 안전하게 보관됩니다.

  • 구조화(Structure)
    • 데이터를 체계적으로 분류하고 저장합니다.

  • 동시성(Concurrency)
    • 여러 서비스나 컨트롤러가 동시에 읽기/쓰기를 해도 데이터가 꼬이지 않게 관리해 줍니다.

  • 무결성/일관성(Integrity/Consistency)
    • 데이터의 삽입, 삭제, 갱신 등의 연산 후에도 데이터 베이스에 저장되어있는 데이터가 정해진 제약조건을 항상 만족합니다.
    • 데이터베이스에 저장되어있는 데이터와 특정 질의에 대한 응답이 변함 없이 일정합니다.

  • 질의(Query)
    • 데이터베이스마다 고유한 방식의 질의를 통해 데이터를 조작할 수 있습니다.

데이터베이스의 종류

  1. 관계형 데이터베이스(RDB)
    • 엑셀 시트(테이블)처럼 데이터를 저장하고, 구조화된 관계를 바탕으로 데이터를 관리합니다.
    • 사용자와 테이블을 연결하여(고유키), 명확하게 관리할 수 있습니다.
    • 데이터의 일관성과 명확성이 장점입니다.

  2. 비관계형 데이터베이스(NoSQL)
    • 엑셀 시트 같은 틀이 없습니다. 데이터를 폴더 안의 문서(JSON)처럼 자유롭게 저장합니다.
    • 빠른 속도와 유연한 확장성이 장점입니다.
    • 정해진 틀이 없어, 나중에 데이터 구조가 바뀌기 쉬운 서비스나 빠른 개발이 필요할 때 유용합니다.
      ex) SNS, 로그데이터

데이터베이스의 언어

데이터베이스의 Query 언어는 백엔드의 Java나, 프론트엔드의 JavaScript와는 목적과 방식이 완전히 다릅니다.

  • 프로그래밍 언어(Java,Python...등)
    • 목적
      • 애플리케이션(서버, 웹)을 만드는 범용 언어입니다.
    • 방식
      • 명령형(Imperative) - 어떻게(How)할지 모든 절차를 지시합니다.

  • 쿼리 언어(SQL, NoSQL API...등)
    • 목적
      • 데이터베이스(DB)에서 데이터를 효율적으로 조회/관리하기 위한 질의 언어입니다.
      • 데이터베이스에게 물어보는 것입니다.
    • 방식
      • 선언형(Declarative) - 무엇을(What) 원하는지만 선언합니다.

SQL(관계형 데이터베이스)

NoSQL(비관계형 데이터베이스)

SQL로 SELECT를 쓰든, NoSQL 함수인 .get()을 쓰든, 무엇(What)을 원하는지만 데이터베이스에게 질의하면 데이터를 가져오는 가장 빠른 실(How)은 알아서 최적화하여 실행합니다.


AI

인간의 학습, 추론, 문제 해결 능력을 인공적으로 구현하려는 컴퓨터 과학의 분야이자 기술입니다.

기본기 없이 AI에 의존할 경우 발생하는 문제

  • 버그 발생이나, 오구사항 변경 시 전체 코드의 맥락을 이해하지 못해 문제를 해결할 수 없습니다.
  • AI가 맥락을 모르고 디버깅에 무한 루프에 빠지거나 환각 현상(Hallucination)을 일으켜 가짜 정보를 뱉어낼 수 있습니다.

AI에 의지하지 않고 코치로 활용하는 방법

  • AI가 못하는 것은 내가 하고, AI가 잘하는 것은 활용하며 서로 도움받는 파트너쉽 관계를 구축해야 합니다.
  • AI를 좋은 코치로 만들기 위한 핵심 자세는 능동적으로 질문하는 것과 AI의 답변을 이해하고 선택적으로 수용하는 것입니다.

AI활용의 목표점을 설정하기 위한 세 가지 질문

  • AI가 생성한 코드가 무엇을 하고, 왜 작동하는지 이해하고 있습니까?
  • 이 코드의 원리와 사용법을 설명할 수 있습니까?
  • AI의 도움 없이 기능을 다시 구현할 수 있습니까

좋은 답변을 얻기 위한 프롬프팅(Prompting) 전략

  • 좋은 답변을 얻기 위한 프롬프팅은 명령(Command), 맥락(Context), Persona, 예시, 답변 형식(format), 어조(Tone)의 6가지 핵심 요소로 구성됩니다.
  • 명령은 구체적이고 명확하게 지시해야 하며, 맥락은 AI가 배경 상황을 이해할 수 있도록 설명해야 합니다.
  • Persona는 AI에게 "10년차 시니어 개발자"와 같은 역할을 부여하여 답변의 전문성을 높이는 요소입니다.
  • 답변 형식과 어조를 정의하면 AI가 리스트, 이미지, 특정 말투 등 요청에 최적화된 답변을 제공합니다.

핵심 프롬프팅(Prompting) 요소 구체화

  • 명령(Command) 구체화하기
    • 단순히 "Array List가 뭐예요?" 대신 "Java는 왜 Array가 있는데도 ArrayList를 만들었는지, 그 근본적인 이유와 설계 철학까지 설명해줘"와 같이 구체적인 요구사항을 제시해야 합니다.

  • 페르소나(Persona) 설정하기
    • "당신은 Java를 10년 이상 가르친 튜터입니다"와 같이 전문 영역에 집중된 역할을 부여하여 답변의 품질을 높입니다.

  • 맥락(Context) 제공하기
    • "저는 Java와 Spring을 배운 백엔드 개발자이고, 이제 막 JavaScript와 React를 배우고 있는 단계입니다"와 같이 현재 상황을 설명하여 AI가 최적화된 기초 관점의 답변을 제공하도록 유도합니다.

명령, 페르소나, 맥락은 AI에게 입력되는 세 가지 핵심 요소이며, 답변 형식, 어조, 예시는 최종 출력에 대한 핵심 요소입니다.


profile
반갑습니다!

0개의 댓글