분류 전체보기
-
ResponseEntity웹 개발/Spring 2025. 5. 14. 14:00
캘린더 API를 만들면서 일정등록 기능을 작성했다.@PostMapping("/events")public Event createEvent(@RequestBody Event event) { if (calendarService.hasConflict(event)) { throw new RuntimeException("해당 시간에 이미 일정이 존재합니다."); }캘린더 일정이 중복되었을때 이런식으로 예외 처리를 하면 spring이 500 Internal Serval Error로 응답한다. 그런데 클라이언트 입장에서는 단순히 500 Internal Server Error 응답가지고 내가 뭔가 잘못 보낸건지, 서버에서 문제가 생긴건지 알수가 없다. 그래서 조금더 명확한 응답을 위해 Respon..
-
selectKey를 활용한 스케줄-멤버 연결 쿼리 정리웹 개발/Spring 2025. 4. 30. 00:10
프로젝트를 작업중일정 작성시 그룹 멤버들중 몇몇과 함께 하는 일정을 등록할수 있는 쿼리를 작성하게되었다. 한마디로 일정에 해당하는 공유 멤버들을 연결해주어야 한다.이를 위해서TBL_SCHEDULE, TBL_SCHEDULE_GROUP_MEMBER 두개의 테이블을 연결해 주어야한다.그러기 위해선 중간 다리 역할인 TBL_SCHEDULE_MEMBER_GROUP이라는 테이블이 하나 필요하다. 이제 TBL_SCHEDULE과 TBL_SCHEDULE_GROUP_MEMBER 는 TBL_SCHEDULE_MEMBER_GROUP의 PK를 통해 연결된 상태이다. 현재 구조는 다음과 같다.TBL_SCHEDULETBL_SCHEDULE_GROUP_MEMBER이 두 테이블은 TBL_SCHEDULE_MEMBER_GROUP의 PK를 ..
-
Spring @RequestParam, @RequestBody, @PathVariable웹 개발/Spring 2025. 4. 27. 15:34
프로젝트 백엔드 API를 설계하면서 값을 넘길때 "@RequestParam, @RequestBody 어떤걸 써야하나? URL에 값이 들어있으면 어떻게 받아야 하지?" 라는 고민을 했다. 결론부터 말하면 간단한 값은 @RequestParam객체처럼 복잡한 값이면 @RequestBodyURL 경로에 들어있는 값이면 @PathVariable 을 쓰면된다.@RequestParamURL 쿼리스트링에 붙어있는 값을 꺼내오는 어노테이션이다. ?key=value 형식으로 넘어온 값을 받는다.GET /products?category=shoes&page=2@GetMapping("/products")public List searchProducts( @RequestParam String category, @Req..
-
리엑트(3)웹 개발/리엑트 2025. 4. 17. 11:58
memoization - 함수형 컴포넌트에서 다른 변화 때문에 연산이 되는 불필요한 연산을 안하게 하기위해 사용한다. useMemo란? - useMemo는 메모리에 있는 캐시를 사용하는 함수 - 캐시에 있는 것을 쓴다는 것은 최초에 마운트를 할 때 연산결과를 캐시에 담아놓고 리랜더링 있을 때 캐시와 결과를 비교하고, 내가 원하는 값의 변화를 줄 때만 연산을 수행한다. 이것을 memoization이라고 한다. const result = useMemo(() => heavyFunction(input), [input]);input이 바뀔때만 heavyFunction을 실핼한다. Context API란? - 리액트 내장 API(16버전 이상) 중 하나로 Props를 넘겨주지 않고도 컴..
-
리엑트(2)웹 개발/리엑트 2025. 4. 17. 10:34
라이프사이클 - 페이지에 컴포넌트가 생성되고, 수정되고, 사라지는 순서를 의미한다. React에서 클래스 컴포넌트를 사용하면, 9개의 메소드를 통해 작업 흐름을 제어할 수 있다. 마운트 - constructor : 새로운 컴포넌트를 생성할 때 마다 실행 - getDerivedStateFromProps : props를 state에 넣을 때 사용한다. 컴포넌트가 마운트될 때와 업데이트가 될 때 실행된다. - render : 준비해놓은 UI를 랜더링할 때 실행된다. - componentDidMount : 페이지에 컴포넌트가 나타난 직 후 실행된다. 업데이트 - getDerivedStateFromProps - shouldComponentUpdate : tr..
-
리엑트(1)웹 개발/리엑트 2025. 4. 17. 10:15
React란 ? - 복잡한 사용자 인터페이스(UI)를 쉽게 구축하기 위해 페이스북에서 제작된 자바스크립트 기반의 라이브러리 - 싱글 페이지 애플리케이션이나 모바일 애플리케이션 개발에 주로 사용된다. - 특정 데이터에 변화가 생길 때 매 번 변화를 주기 위한 코드를 작성하는 것이 아니라, 기존 코드를 없애고 다시 새롭게 랜더링 한다.렌더링(Rendering) - 화면에 보여주는 것 - 코드가 번역(컴파일)되어 실행된 뒤 화면을 통해 사용자에게 보여진다.// 상태가 변할 때 리렌더링 되는 간단한 컴포넌트import { useState } from "react";function Counter() { const [count, setCount] = useState(0); return ( 현재 ..
-
IoC와 DI웹 개발/Spring 2025. 4. 16. 01:59
DI (Dependency Injection)IOC (Inversion of Control)Spring의 핵심 설계 철학들 중 중요한 두 가지이다. 아래 코드를 보면 ReportService는 PdfExporter에 의존하고있다PdfExporter를 ExcelExporter로 바꾸고 싶다면 ReportService도 수정해야 하기때문에 두 클래스는 강하게 결합되어있다.// 의존 클래스public class PdfExporter { public void export(String content) { System.out.println("PDF 내보내기: " + content); }}// Service 클래스 (강한 결합 발생)public class ReportService { ..
-
Forward vs Redirect웹 개발/JSP 2025. 4. 1. 23:00
Forward 와 Redirect는 JSP환경에서 페이지에서 다른 페이지로 이동하는 페이지 전환기능이다.두가지 방식을 이해하기 위해 StackOverFlow를 보던중 적절한 비유를 찾았다. Fowarding내가 만약 우체국에 갔다고 가정했을때 거기에는 여러 창구와 그곳에 앉아있는 직원이 있다. 내가 무언가를 요청하면, 그중 한명이 그 요청을 받아들이고 내부적으로 요청을 처리할 책임이 있는 다른 직원에게 전달한다. 그리고 모든 과정이 끝나면 당신은 최종적으로 결과를 받게 된다. Redirecting같은 상황에서, 이번에는 요청을 받은 직원이 나에게 5번 창구로 가서 저기 있는 분에게 요청하세요 라고 적힌 토큰을 준다. 당신은 그 지시에 따라 직접 5번 창구로 가서 그 직원에게 다시 요청을 한다.Forwa..