전체 글 66

[Spring] 스프링 웹 개발 기초(정적 컨텐츠, MVC와 템플릿 엔진, API)

웹 브라우저에서 받은 요청을 스프링에서 처리할 때,1. 정적 컨텐츠로 반환2. MVC와 템플릿 엔진을 이용하여 반환3. API를 이용하여 반환하는 방법이 있다.   정적 컨텐츠정적 컨텐츠란 서버에서 별도의 처리 없이 있는 그대로 클라이언트(브라우저)로 전달되는 파일들이다. 폴더 구조를 보면 resources 폴더 아래 static 폴더가 있다.여기에 html 파일을 넣어두기만 하면 http://localhost:8080/hello-static.html라고 쳤을 때 해당 파일이 보인다.  Spring에서는 웹 브라우저에서 요청이 왔을 때 우선 컨트롤러에서 찾아보고, 없으면static 폴더에 있는 컨텐츠를 보여주는 것이다.          MVC와 템플릿 엔진MVC구조란 Model, View, Control..

Spring 2024.12.24

[Spring] 프로젝트 시작하기 (IntelliJ)

인텔리제이 환경에서 스프링 부트 프로그램을 개발하려면 어떻게 해야할까?  우선 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트를 생성한다.https://start.spring.io    들어가면 이런 화면이 뜰 텐데 여기서 Project Metadata를 알맞게 설정하고 GENERATE 버튼을 누르면 된다.  요즘은 Maven 보다는 Gradle을 주로 쓴다고 한다.버전에서 SNAPSHOT은 아직 만들고 있는 버전이기 때문에 그렇지 않은 버전 중 가장 높은 버전을 선택하였다.Dependencies에는 일단 Spring Web, Thymeleaf으로 하였다.Spring Web - 웹 애플리케이션 개발을 지원, RESTful 웹 서비스와 MVC(Model-View-Controller) 아키텍처를 구축하..

Spring 2024.12.22

[JAVA] 효율적인 코딩을 도와주는 Stream API

Stream이란?컬렉션 데이터를 다룰 때 효율적이고 직관적인 방법을 제공하는 API다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것Stream을 통해 데이터의 필터링, 정렬, 변환, 집계 등을 함수형 프로그래밍 스타일로 구현할 수 있다.    특징단일 사용 : Stream은 한 번만 사용 가능한 단일 데이터 흐림이다. 한 번 사용한 Stream은 재사용 할 수 없으며 새로운 Stream을 생성해야 한다.내부 반복 : 기존의 외부 반복(for-each)을 대체하여 내부적으로 데이터 처리를 반복하는 방식이다.지연 연산 : Stream에서 filter(), map() 같은 중간 연산은 즉시 실행되지 않고 최종 연산이 호출될 때 실행된다. 불필요한 연산을 줄일 수 있다.병렬 처리 기능 : parallelS..

JAVA 2024.10.31

[MVC패턴] 역할을 어떻게 나눠야할까?

지난번에 MVC 패턴에 대해 간단히 정리해뒀었다.MVC 패턴을 직접 적용해보며 Model-View-Controller 도 다양한 기준에 따라 나눠지고 사용된다는 것을 깨달았다.  https://sou330.tistory.com/56 MVC 패턴이 무엇일까?MVC (Model-View-Controller) 소프트웨어 설계 패턴 중 하나로 주로 웹 애플리케이션에서 많이 사용된다.이 패턴은 애플리케이션의 구조를 세 가지 역할로 분리하여 유지보수성과 확장성을 높여준다.sou330.tistory.com    MVC 패턴을 구성할 때 클래스들을 나누는 기준코드의 역할과 책임을 명확히 구분하여 유지보수와 확장성을 높이기 위함각각의 요소는 서로의 역할을 침범하지 않고 독립적으로 동작하도록 설계된다.    1. Cont..

[Python] 백준 12100 2048(Easy)

문제2048 게임은 4×4 크기의 보드에서 혼자 즐기는 재미있는 게임이다. 이 게임에서 한 번의 이동은 보드 위에 있는 전체 블록을 상하좌우 네 방향 중 하나로 이동시키는 것이다. 이때, 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐지게 된다. 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다. (실제 게임에서는 이동을 한 번 할 때마다 블록이 추가되지만, 이 문제에서 블록이 추가되는 경우는 없다) 이 문제에서 다루는 2048 게임은 보드의 크기가 N×N 이다. 보드의 크기와 보드판의 블록 상태가 주어졌을 때, 최대 5번 이동해서 만들 수 있는 가장 큰 블록의 값을 구하는 프로그램을 작성하시오.https://www.acmicpc.net/problem/12100   난..

백준풀이 2024.10.29

[Python] 백준 9328 열쇠

문제상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 필요하다. 상근이는 일부 열쇠를 이미 가지고 있고, 일부 열쇠는 빌딩의 바닥에 놓여져 있다. 상근이는 상하좌우로만 이동할 수 있다.상근이가 훔칠 수 있는 문서의 최대 개수를 구하는 프로그램을 작성하시오.https://www.acmicpc.net/problem/9328     난이도골드 1   코드import sysfrom collections import dequedef search() : global answer # BFS while queue : posX, posY = queue.po..

백준풀이 2024.10.23

[우테코 7기] 1주차 프리코스 후기

드디어 우아한테크코스 7기 1주 차 프리코스가 시작되었다! 지원서를 제출하면 메일로 안내가 오는데 은근 스팸 메시지함에 들어가 있었다는 사람들이 많았다.나도 그래서 하루 전까지 연락이 없길래 카톡 오픈채팅방에 들어가보니 사람들이 알려주었다. 휴.. 다행   우테코에는 디스코드 커뮤니티가 있다!필수로 참여하지는 않아도 되지만그 곳에서는 여러 개발 꿀팁들을 공유하고, 잡담, 전주차 코드리뷰 등을 할 수 있는 곳이었다.하나하나 읽어보면 도움이 될 것 같은데 사람이 너무 많아 다 읽진 못했다.   이번 1주차 미션은 java-calculator로 문자열 개산을 하는 프로그램을 제작하는 것이었다. 첫인상은 생각보다 매우 간단하네? 였다. 지난 6기보다 더 간단한 거 같은데..그러나 개발을 하면 할수록 내가 몰랐던..

테스트 주도 개발 TDD는 무엇일까?

TDD (Test-Driven Development) 소프트웨어 개발 방법론 중 하나로 코드를 작성하기 전에 테스트 코드를 먼저 작성하고, 그 테스트를 통과하는 코드를 구현하는 방식이다.TDD는 코드의 품질을 높이고 버그를 줄이기 위한 강력한 방법론으로 코드 설계와 테스트를 동시에 개선할 수 있다. TDD 방식의 핵심은 "테스트가 코드를 이끈다" 는 원칙이다. 테스트를 먼저 작성하고, 그 테스트를 통과하기 위한 최고한의 코드를 작성한 후 리팩토링을 통해 개선하는 과정을 반복하게 된다.       TDD의 3단계 (Red-Green-Refactor)Red : 실패하는 테스트 작성Green : 테스트를 통과하는 최소한의 코드 작성Refactor : 중복 제거, 코드 개선, 최적화    Red- 실패하는 테스..

원활한 협업을 위한 '커밋 메시지' 작성 규칙

커밋 컨벤션버전 관리 시스템(Git 등)에서 커밋 메시지 작성 규칙을 정의한 것협업하는 개발자들 간에 일관된 커밋 메시지 작성 방식을 유지함으로써 프로젝트 관리와 협업을 원활하게 해주는 중요한 규칙이다.커밋 메시지를 체계적으로 작성하면 프로젝트의 변경 내역을 쉽게 추적할 수 있고 나중에 이력을 확인하거나 버그를 수정할 때도 많은 도움을 준다.       커밋 컨벤션의 기본 구조():    1. 타입 (type)커밋의 성격을 나타낸다.타입을 명확하게 정의함으로써 어떤 종류의 변경이 이루어졌는지 쉽게 파악할 수 있다.feat새로운 기능을 추가할 때 사용fix버그를 수정할 때 사용docs문서 수정 및 추가 (README, 주석 등)style코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우refactor코드..