[내일배움캠프] 본캠프 코드카타 20번 문제
·
TIL/스파르타 코드카타
알고리즘 문제: 자릿수를 큰 순서대로 정렬하기이번 문제는 정수 n의 각 자릿수를 큰 순서부터 작은 순서대로 정렬하여 새로운 정수를 만드는 것입니다.문제 분석n을 문자열로 변환해 각 자릿수를 분리합니다.분리된 숫자들을 내림차순으로 정렬합니다.정렬된 문자열을 다시 숫자로 변환하여 반환합니다.제약 사항n은 1 이상 8,000,000,000 이하의 자연수입니다.코드 구현 (Java)import java.util.Arrays;import java.util.Collections;public class DigitSorter { public long solution(long n) { // 1. 숫자를 문자열로 변환하고 문자 배열로 만듦 String[] digits = String.valu..
[내일배움캠프] CH 3 일정 관리 앱 Develop 리팩토링
·
TIL/스파르타 TIL
[내일배움캠프] CH 3 일정 관리 앱 Develop 리팩토링이번 글에서는 Spring Comment Calendar 프로젝트를 통해 RESTful 애플리케이션의 개발 및 리팩토링 과정을 공유하고자 합니다. 이 프로젝트는 Spring Boot와 JWT 기반 인증을 활용하여 사용자별 일정과 댓글을 관리하는 애플리케이션입니다. 특히 JWT 토큰을 쿠키에 저장해 보안성과 접근성을 높였으며, 각 기능을 모듈화하여 유지 보수성을 강화했습니다.주요 기능회원가입 및 로그인 기능 - 사용자 가입 후 JWT 인증을 통해 로그인 및 일정 관리를 가능하게 합니다.JWT 기반 인증 및 권한 관리 - 인증 토큰을 쿠키에 저장하고 사용자의 역할(Role)에 따라 일정 및 댓글 접근 권한을 부여합니다.일정 및 댓글 관리 - 사용자..
[내일배움캠프] 본캠프 코드카타 19번 문제
·
TIL/스파르타 코드카타
알고리즘 문제: 어떤 양의 정수가 제곱수인지 확인하기이번 문제는 임의의 양의 정수 n이 양의 정수 x의 제곱인지 확인하는 것입니다. n이 양의 정수 x의 제곱이라면 (x + 1)^2을 반환하고, 그렇지 않다면 -1을 반환해야 합니다.문제 분석n이 어떤 양의 정수 x의 제곱이라면, n은 x * x 형태로 표현됩니다. 예를 들어, n = 121이라면, 이는 11 * 11 형태이므로 x = 11입니다.n이 x * x 형태가 아니면 -1을 반환합니다.접근 방법주어진 수 n에 대해 Math.sqrt(n)을 사용하여 n의 제곱근을 구합니다.제곱근이 정수라면, (제곱근 + 1)의 제곱을 반환하고, 정수가 아니라면 -1을 반환합니다.제약 사항n은 1 이상, 50조 이하의 양의 정수입니다. 따라서 이 범위에서 효율적으로..
[내일배움캠프] CH 3 일정 관리 앱 Develop
·
TIL/스파르타 TIL
요번에 주어진 프로젝트에 대해 분석해보았습니다, 요번 개인 프로젝트는 일정 관리 시스템을 개발하는 것입니다. 주요 요구사항과 기능은 크게 API 명세서 작성, ERD 설계, 일정 및 댓글 CRUD, 유저 관리, 페이징 처리, JWT 인증/인가 및 예외처리로 나눌 수 있습니다. 각 기능에 대한 세부 분석은 다음과 같습니다.1. 공통 조건3 Layer Architecture: 프로젝트는 Presentation, Service, Persistence의 세 레이어로 나눠서 개발해야 합니다. 즉, 각 레이어에 맞는 역할을 수행하도록 코드를 분리해야 합니다.JPA 사용: 데이터베이스와의 통신을 JPA로 처리합니다. 모든 CRUD 기능에서 JPA를 통해 데이터를 처리해야 하며, 연관관계는 양방향으로 설정합니다.JWT..
Spring의 IoC(제어의 역전)와 DI(의존성 주입) 이해하기
·
TIL/스파르타 TIL
Spring의 IoC(제어의 역전)와 DI(의존성 주입) 이해하기Spring 프레임워크에서 가장 중요한 개념 중 하나는 IoC(제어의 역전, Inversion of Control)와 DI(의존성 주입, Dependency Injection)입니다. 이 두 가지 개념은 Spring이 객체들 간의 의존성을 관리하는 방식에 대해 설명하며, 객체지향 프로그래밍의 중요한 원칙 중 하나인 유연한 코드 구조를 만들기 위해 사용됩니다.1. IoC (제어의 역전)IoC는 제어 흐름을 개발자가 아닌 프레임워크가 담당하는 것을 의미합니다. 전통적인 애플리케이션에서는 객체를 개발자가 직접 생성하고, 객체 간의 의존성을 개발자가 직접 관리합니다. 하지만 IoC를 도입하면 객체의 생성과 관리, 의존성 주입 등을 개발자가 아닌 컨..
[내일배움캠프] Spring 1차 숙제 (튜터님께 받은 피드백)
·
TIL/스파르타 TIL
튜터님께 받은 피드백1. 로그인 후 인증 흐름 개선 (세션 인증 vs 토큰 인증)문제: 현재 로그인 후 인증 흐름이 자연스러워 보이지만, 사용자가 직접 http://localhost:8080/calendar.html에 접근하면 로그인 없이 캘린더를 사용할 수 있습니다.해결책: 세션 인증 방식 또는 토큰 인증 방식을 도입하여 인증된 사용자만 캘린더 페이지에 접근할 수 있도록 해야 합니다. 특히 JWT (JSON Web Token) 기반의 인증 방식을 사용하는 것이 RESTful API와 함께 가장 많이 사용되는 방식입니다.블로그 주제: "Spring Boot에서 JWT 기반 인증 구현하기" 또는 "세션 기반 인증과 토큰 기반 인증의 차이점 및 구현 방법"2. Request Parameter로 패스워드 전송..
[내일배움캠프] Spring 1차 숙제
·
TIL/스파르타 자바공부기간
스케줄 관리 API 명세서Base URLhttp://localhost:8080/1. 모든 일정 조회EndpointGET /api/schedules설명모든 일정을 조회합니다.RequestMethod: GETHeaders:Content-Type: application/jsonResponseStatus: 200 OKContent-Type: application/jsonResponse Body Example[ { "id": 1, "date": "2024-10-01", "title": "회의" }, { "id": 2, "date": "2024-10-02", "title": "프로젝트 마감" }]2. 특정 날짜의 일정 조회EndpointGET /api/schedules/{da..
[내일배움캠프] 본캠프 TIL Spring 입문(3)
·
TIL/스파르타 TIL
Spring에서 클라이언트와 서버 간에 데이터를 전송할 때, 주로 JSON 형태로 데이터를 주고받는 방식이 많이 사용됩니다. 이는 RESTful 웹 서비스 구현에서 가장 흔한 데이터 교환 형식이기 때문입니다. 클라이언트와 서버 사이에서 Spring이 데이터를 어떻게 처리하고 전송하는지 살펴보겠습니다.1. Spring에서 데이터 전송 흐름Spring에서는 클라이언트와 서버 간의 데이터 전송을 처리할 때, 다음과 같은 단계를 거칩니다:1.1. 클라이언트 요청 (Request)클라이언트는 서버에 HTTP 요청을 보냅니다. 이 요청은 주로 GET, POST, PUT, DELETE와 같은 HTTP 메서드를 사용합니다.요청 데이터는 쿼리 파라미터, URL 경로 변수, HTTP 요청 본문(주로 JSON 형식)으로 전..
[내일배움캠프] 본캠프 TIL Spring 입문(2)
·
TIL/스파르타 TIL
Spring에서 정적 페이지와 동적 페이지는 각각 다른 방식으로 다뤄지며, 역할도 명확히 구분됩니다. 이 두 가지를 나누어 관리하는 이유는 서버 자원의 효율적 사용과 응답 속도 향상 그리고 개발 및 유지보수의 용이성 때문입니다.1. 정적 페이지 (Static Page)1) 정의정적 페이지는 미리 만들어진 HTML, CSS, JavaScript 파일을 그대로 제공하는 웹 페이지입니다. 서버는 이 파일들을 단순히 클라이언트에게 전송하기만 하고, 서버에서 별도의 데이터 처리나 로직 실행 없이 요청한 파일 그대로 응답됩니다.2) Spring에서 정적 페이지 처리 방법Spring에서는 기본적으로 정적 리소스(static resources)를 처리할 수 있도록 설정되어 있습니다. 이러한 정적 파일들은 프로젝트의 특..
[내일배움캠프] 본캠프 TIL Spring 입문(1)
·
TIL/스파르타 TIL
1. MVC 패턴이란?Spring MVC (Model-View-Controller)는 웹 애플리케이션을 개발할 때 사용하는 구조적인 패턴 중 하나로, 애플리케이션의 각 부분을 구분하여 효율적으로 관리할 수 있게 해줍니다. 이를 쉽게 설명하자면:Model (모델): 애플리케이션의 데이터와 그 데이터를 처리하는 로직을 담고 있습니다. 데이터베이스에서 정보를 가져오거나 사용자가 입력한 데이터를 처리하는 역할을 합니다. 예를 들어, 사용자의 정보나 상품 목록 같은 것들이 모델에 해당합니다.View (뷰): 사용자가 볼 수 있는 화면을 담당합니다. 즉, HTML, CSS, JavaScript 등을 사용하여 데이터를 시각적으로 표현합니다. View는 Model에서 가져온 데이터를 사용자에게 보여주는 역할을 합니다...