전체 글 57

JavaScript에서 console.log에 객체를 출력하면 [object Object]로 표시 될 때

개발자 모드로 console 내용 보려고 할때 아래처럼 object로 표시가 된다면 코드에 JSON.stringify 추가 하시면 됩니다.  변경 전: console.log("유저 정보: " + response.data);변경 후:    console.log("유저 정보: " + JSON.stringify(response.data));이런식으로 이제 잘 보이는 것을 봀 수 있습니다.이유는 다음과 같습니다. JavaScript에서 console.log에 객체를 출력하면 [object Object]로 표시되는 것은 객체를 문자열로 변환할 때 기본적으로 toString() 메서드가 호출되기 때문입니다. 이를 해결하려면 객체의 내용을 명시적으로 출력해야 합니다.JSON.stringify는 JavaScript 객..

문제 및 해결 2024.12.07

Spring의 7가지 요청 데이터 처리 어노테이션

Spring Framework를 처음 접한 분들이라면 @RequestBody, @RequestParam 같은 어노테이션이 헷갈릴 수 있습니다.이 글에서는 HTTP 요청 데이터를 처리하는 Spring의 7가지 필수 어노테이션을 쉽고 간단한 예제와 함께 소개합니다.1. @RequestBody: 요청 데이터를 객체로 변환기능클라이언트가 보낸 JSON 데이터를 Java 객체로 변환합니다.주로 POST 요청에서 데이터를 처리할 때 사용됩니다.//UserDtopublic class UserDto { private String email; private String name;}//Controller@PostMapping("/user")public String createUser(@RequestBody Us..

Spring 2024.12.07

컨트롤러와 서비스에서 동일한 메서드명을 사용하는 것이 적절할까?

개발자라면 메서드 이름을 지을 때 항상 고민하게 됩니다. 특히 컨트롤러와 서비스에서 동일한 이름의 메서드를 사용하는 것이 적절한지에 대해 의문이 들 때가 있습니다. 이번 글에서는 이 주제에 대해 다뤄보려고 합니다.1. 컨트롤러와 서비스의 역할컨트롤러와 서비스는 서로 다른 역할을 수행합니다.이 둘의 역할을 명확히 이해하면 메서드 이름을 어떻게 짓는 것이 좋은지 자연스럽게 답이 나옵니다.컨트롤러의 역할클라이언트(웹, 앱 등)와 상호작용합니다.HTTP 요청을 받아 적절한 응답을 반환합니다.사용자 관점에서 이해하기 쉬운 이름을 사용하는 것이 중요합니다.서비스의 역할비즈니스 로직을 처리합니다.데이터 저장소(Repository)와 상호작용하며 데이터를 조작하거나 처리합니다.내부 동작에 초점을 맞춘 이름을 사용하는 ..

궁금증 2024.12.06

Spring Boot에서 H2 Console 'localhost에서 연결을 거부했습니다' 에러 해결

문제 상황:Spring Boot 애플리케이션에서 H2 Console을 활성화한 후 http://localhost:8080/h2-console에 접속을 시도했습니다.하지만 "localhost에서 연결을 거부했습니다"라는 에러가 발생하며 H2 Console에 접속할 수 없었습니다.이 문제는 개발 초기 단계에서 테스트 데이터베이스를 사용하려고 할 때 자주 발생하는 상황입니다. 해결 방법:Spring Security 설정 수정 - Spring Security(6.x 이상) H2 Console에 접근할 수 있도록 Spring Security 설정을 수정했습니다.최신 Spring Security(6.x 이상)에서는 아래와 같이 설정해야 합니다: @Bean public SecurityFilterChain fi..

Spring 2024.12.06

[Spring] Optional의 활용: Repository, Service, 그리고 ResponseEntity의 역할

이전 글에서 스트림, 람다를 소개하면서 Optional 키워드도 같이 소개를 한적이 있었는데 설명이 많이 부족하여 다시 설명을 하려고 합니다.1. Repository 계층에서 Optional을 사용하는 이유Repository 계층은 데이터베이스와의 직접적인 인터페이스 역할을 하며, 값이 존재하지 않을 가능성을 처리하는 것이 중요합니다.이유 1: null-safe 코드 작성Optional을 사용하면 null 반환 대신 Optional.empty()를 반환하여 null 처리를 강제합니다.이는 NullPointerException을 방지하고 호출자가 명시적으로 결과를 처리하게 만듭니다.이유 2: 값의 유무를 명확히 표현단일 객체를 반환하는 메서드에서 "값이 없을 수도 있음"을 명확히 알릴 수 있습니다.예를 들..

Spring 2024.12.06

객체 동등성 비교를 간단하게: @EqualsAndHashCode

개발을 하다 보면 객체 간의 동등성을 비교해야 할 때가 많습니다. 하지만 Java의 기본 equals()와 hashCode()는 메모리 주소를 기준으로 동등성을 판단하기 때문에, 우리가 원하는 대로 작동하지 않을 수 있습니다.예를 들어, 다음 두 객체는 내용은 같지만 기본 equals()로 비교하면 다르다고 나옵니다:Person p1 = new Person("John", 30);Person p2 = new Person("John", 30);System.out.println(p1.equals(p2)); // false이 문제를 해결하려면 equals()와 hashCode()를 재정의해야 합니다. 하지만 직접 작성하면 코드가 길어지고 유지보수도 어렵습니다. 이런 번거로움을 해결하기 위해 등장한 것이 바로 L..

Spring 2024.12.04

JPA에서 @Modifying 사용법과 동작 원리

Spring Data JPA에서 데이터 변경 작업(UPDATE, DELETE 등)을 실행할 때, 반드시 알아야 하는 애노테이션 중 하나가 @Modifying입니다. 이 글에서는 @Modifying의 역할, 사용법, 그리고 주의사항을 설명하겠습니다.1. @Modifying란?@Modifying은 Spring Data JPA에서 데이터베이스에 영향을 미치는 JPQL이나 Native Query를 실행할 때 사용하는 애노테이션입니다.JPA의 @Query는 기본적으로 **읽기 쿼리(SELECT)**로 간주되며, 이를 데이터 변경 쿼리로 변경하려면 @Modifying이 필요합니다.주요 특징데이터 변경 작업 명시:INSERT, UPDATE, DELETE와 같은 쓰기 작업임을 JPA에게 명확히 알려줍니다.트랜잭션 필요..

Spring 2024.12.03

Spring에서 @RequiredArgsConstructor 사용법과 장점

Spring Boot 프로젝트를 진행하다 보면, 의존성 주입을 위해 생성자를 작성하는 일이 많습니다. 이때, @RequiredArgsConstructor 애노테이션을 사용하면 의존성 주입 코드가 깔끔해지고 반복적인 코드를 줄일 수 있습니다. 이 글에서는 @RequiredArgsConstructor의 개념, 사용법, 그리고 장점을 정리하겠습니다. 😊주요 특징final 필드의 생성자 자동 생성final 키워드가 붙은 필드에 대해 생성자를 자동으로 만들어 줍니다.@NonNull 필드 지원final이 아닌 필드 중에서도 @NonNull 애노테이션이 붙어 있으면 생성자에 포함됩니다.불변 객체 작성final 필드는 생성자를 통해서만 초기화되므로, 객체 생성 이후에는 값을 변경할 수 없습니다.2. @Required..

Spring 2024.12.03

자바 람다식과 스트림: 사용법, 연습법, 그리고 Optional까지

1. 소개: 람다식과 스트림의 중요성자바 8은 함수형 프로그래밍의 요소를 도입하면서 개발자들에게 함수를 값으로 다루는 방식과 더불어 데이터 처리 방식을 혁신적으로 바꾸는 도구를 제공했습니다.람다식과 스트림은 자바 8에서 등장한 대표적인 기능으로, 코드의 간결성과 가독성을 대폭 향상시킵니다.2. 람다식: 함수를 값처럼 다루는 자바의 새로운 방식람다식이란?람다식은 익명 함수(Anonymous Function)를 간결하게 표현하는 문법으로, 주로 함수형 인터페이스와 함께 사용됩니다.이를 통해 메서드를 변수처럼 다루거나 매개변수로 전달할 수 있습니다.사용 이유코드 간결화: 불필요한 선언부 제거.가독성 향상: 익명 클래스보다 간단한 형태로 표현.유연성 제공: 함수형 인터페이스를 활용한 다양한 문맥(Context)..

IT 2024.12.01

Stack과 Queue란?

안녕하세요! 오늘은 자료구조에서 꼭 배우는 Stack(스택)과 Queue(큐)에 대해 알아보겠습니다.일상에서 쉽게 접할 수 있는 예시와 함께 이해해 봅시다! 😊1. Stack(스택)이란?Stack은 LIFO(Last In, First Out) 구조입니다."마지막에 들어간 것이 가장 먼저 나온다"는 뜻이에요.📦 일상 속 스택 예시:프링글스 과자를 떠올려보세요.공장에서는 아래부터 과자를 담아 포장을 하게 됩니다.먹는 사람은 과자를 꺼낼때 제일 위에 있는 과자를 먼저 꺼내게 됩니다.이처럼, Stack은 데이터를 위에서 쌓고 꺼내는 방식이에요. 🛠 스택의 주요 동작Push: 데이터를 스택에 넣는다.Pop: 데이터를 스택에서 꺼낸다.Peek: 가장 위에 있는 데이터를 확인한다(꺼내지는 않음).💻 코드로 보..

코테 2024.11.30