목록웹개발 (52)
주뇽's 저장소
최근에 Spring Boot와 JPA를 사용하여 게시글 프로젝트를 진행하던 중, 유저가 받은 총 좋아요 개수를 조회하는 과정에서 LazyInitializationException이 발생하는 문제를 겪었다. 이 글에서는 해당 문제의 원인과 해결 방법에 대해 자세히 설명한다. 문제 상황: UserAccount 엔티티와 Post 엔티티가 일대다 관계로 매핑되어 있다UserAccount 엔티티에서 posts 필드가 지연 로딩(Lazy Loading)으로 설정되어 있다유저가 받은 총 좋아요 개수를 조회하기 위해 UserAccount의 getTotalLikeCount() 메서드에서 posts 컬렉션에 접근하려고 한다getTotalLikeCount() 메서드 내부에서 LazyInitializationException..
Getx를 사용한 Flutter 개발: 컨텍스트 없는 내비게이션 오류 해결하기Flutter 개발에서 내비게이션은 매우 중요한 부분이다. 화면 간의 이동을 처리하고 데이터를 전달하는 등의 작업을 수행하기 위해 내비게이션을 사용한다. Flutter에서는 기본적으로 Navigator 위젯을 사용하여 내비게이션을 구현할 수 있지만, 더 편리하고 강력한 방법으로 Getx 패키지를 사용할 수 있다. GetXGetx는 Flutter를 위한 경량화된 상태 관리, 종속성 주입 및 라우트 관리 솔루션이다. Getx를 사용하면 코드를 간결하게 작성할 수 있으며, 내비게이션을 더 쉽게 처리할 수 있다. 특히 Getx는 컨텍스트 없는 내비게이션을 지원하여 더 간편하게 라우트를 관리할 수 있다. 하지만 Getx를 사용할 때 ..
Spring Security는 웹 애플리케이션의 인증과 인가를 담당하는 강력한 프레임워크이다. 이번 글에서는 Spring Security에서 제공하는 @AuthenticationPrincipal 어노테이션을 사용하여 로그인한 사용자의 정보를 쉽게 가져오는 방법에 대해 알아보자. Authentication최근에 Spring Boot와 Spring Security를 사용하여 웹 애플리케이션을 개발하던 중, 로그인한 사용자의 정보를 컨트롤러에서 사용해야 하는 상황에 직면했다. 처음에는 Authentication 객체를 직접 주입받아 사용하는 방법을 시도했다.(게시글에 좋아요 기능 추가)@PostMapping("/like")public ResponseEntity likePost(@PathVariable Long..
[Spring Boot] 실시간 채팅 기능을 위한 WebSocket, SockJS, STOMP 실시간 채팅 기능은 현대 웹 애플리케이션에서 필수적인 요소 중 하나이다. 사용자가 실시간으로 정보를 교환할 수 있게 함으로써, 애플리케이션의 상호작용성과 사용자 경험을 크게 향상시킨다. 이 글에서는 Spring Boot 애플리케이션에 실시간 채팅 기능을 구현하기 위한 세 가지 주요 기술인 WebSocket, SockJS, STOMP에 대해 소개하고, 각각의 장단점 및 적합한 사용 사례를 탐구한다. WebSocket WebSocket 프로토콜은 실시간 양방향 통신을 가능하게 하는 웹 표준이다. 이는 서버와 클라이언트 간의 지속적인 연결을 유지하며, 데이터를 신속하게 교환할 수 있도록 설계되었다. WebSocket..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/boYM0U/btsE3pSSudm/nYd13fLDO3nGxpvpeynMx0/img.png)
1. OPENAI GPT API 및 요청 및 응답 데이터 확인 준비물 : OpenAI API를 이용하기 위해서는 OpenAI에 신용카드를 등록해야 한다. 이후 자신의 API Key를 확인. API 레펀러스 페이지에서 초록색 API Keys 문구를 클릭하여 자신의 새로운 API Key를 생성하고 확인한다. 1-1 GPT 요청 형식 확인하기 curl https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-3.5-turbo", "messages": [ { "role": "user", "content": ..
스프링 시큐리티 필터 체인 설정 스프링 시큐리티(Spring Security)는 자바(Java) 기반의 애플리케이션을 위한 강력한 인증 및 접근 제어 프레임워크다. 스프링 프레임워크(Spring Framework)의 일부로, 웹 애플리케이션과 메소드 수준의 보안을 제공한다. 이는 애플리케이션의 보안을 강화하기 위해 맞춤화하고 확장할 수 있는 다양한 기능들을 포함하고 있다. 주요 특징 인증(Authentication): 사용자가 누구인지 확인하는 과정이다. 스프링 시큐리티는 다양한 인증 메커니즘을 지원하며, 이를 통해 사용자 이름과 비밀번호, 토큰 기반 인증, LDAP, OAuth 등 다양한 방식으로 인증을 수행할 수 있다. 권한 부여(Authorization): 인증된 사용자가 특정 자원에 접근하거나 특..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vJgF3/btsCWNjcJDj/H4ZyxPvUt0S7LOOL5jYvy0/img.png)
점프 투 스프링부트 3 Spring Boot와 React를 이용하여 게시판 풀스택 프로젝트를 진행 중에 Question 엔티티와 Answer 엔티티의 양방향 관계 때문에 JackSon 무한루프에 빠져 오버플로우가 발생하는 문제가 생겼다. 에러 내용은 너무 길어서 가장 윗 부분만 잘라 왔다. // Question Entity의 일부 @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE) private List answerList = new ArrayList(); // Answer Entity 일부 @ManyToOne private Question question; 해당 문제가 발생한 이유는 다음과 같다. 예를 들어, Question 객체를 JSON..
1. 기본 인증 (Basic Authentication) 특징 HTTP 인증 방식 중 가장 간단하다. 사용자 이름과 비밀번호를 결합하여 Base64로 인코딩한 후 전송한다. HTTP 헤더의 Authorization 필드에 사용한다. 장점 구현이 간단하고 이해하기 쉽다. 기본적인 인증 요구사항에 적합하다. 단점 보안이 약하다. HTTPS와 함께 사용하는 것이 필수적이다. 매 요청마다 사용자 이름과 비밀번호를 전송해야 한다. 예시 사용자가 웹사이트에 로그인하려고 하면, 브라우저가 사용자 이름과 비밀번호를 요청하여 서버에 전송한다. 2. JWT (JSON Web Token) 특징 자가 포함된 토큰 방식을 사용한다. 사용자 정보와 인증 데이터를 JSON 형태로 담아 암호화한다. 헤더, 페이로드, 서명으로 구성된..