[게시판 만들기] 개발 환경 세팅 / Thymeleaf 로 View 화면 구현 > 자유게시판 1

본문 바로가기
사이트 내 전체검색

자유게시판 1

[게시판 만들기] 개발 환경 세팅 / Thymeleaf 로 View 화면 구현

페이지 정보

작성자 최고관리자 댓글 0건 조회 12회 작성일 24-11-15 01:17

본문


[게시판 만들기] 개발 환경 세팅 / Thymeleaf 로 View 화면 구현

tndusehrwk3 contents are below.

References: 05-tndusehrwk3 contents: Go Click
Other Blog: Blog ArtRobot (Title: [게시판 만들기] 개발 환경 세팅 / Thymeleaf 로 View 화면 구현) More ...
Publish Date: (2024-08-04|4:09 pm), Modified Date: (2024-11-15|10:17 am)


--- Blog Post Contents
스프링 컨테이너와 스프링 빈
스프링 컨테이너 생성 스프링은 (DI)컨테이너를 통해 객체를 관리한다. 스프링 컨테이너는 아래와 같이 생성할 수 있다. ApplicationContext 는 스프링 컨테이너이며 인터페이스이다. 때문에 이 컨테이너를 생성하기 위해서는 구현체가 필요하다. 컨테이너를 생성할 때는 어떤 객체들을 등록할 것인지에 대한 정보(설정 정보)를 기반으로 생성하게 되는데 이 설정 정보의 타입에 따라서 구현체가 달라지게 된다. 여기서는 아래와 같이 annotation 기반의 설정 정보를 사용했으므로 AnnotationConfigApplicationContext 구현체를 사용한다. 설정 정보는 스프링 내에서 사용하게 될 객체와 각각의 의존 객체 들에 대해 정의해둔 것이다. 이 정보를....... (Publish Date: 2024-08-22)

자바7(JDK 7) 특징
자바8 부터 사용했었는데 생각해보니 자바7에서 추가된 기능들은 너무 자연스럽게 사용하고 있어서 몰랐던 것 같아 정리. 정리된 내용은 공식문서를 기반으로 하며 그 중에서도 Small language enhancements (Project Coin) 부분 위주로 정리했다. The try-with-resources Statement DB연결이나 파일을 읽어들이는 경우 프로그램이 종료될 때 해당 메서드들에 대한 연결도 종료해야 한다. 자원의 종료는 비즈니스 로직이 도중에 비정상적인 방식으로 종료된다고 해도 반드시 이루어져야 했기 때문에 기존에는 finally 블럭을 통해 자원을 종료(close())했다. 하지만 자바7 부터는 try-with-resources를 통해 try 괄호 내에 선언한 자원들에 대해....... (Publish Date: 2024-08-09)

[PGM/2022 KAKAO BLIND RECRUITMENT] 양궁대회 (Lv2)
https://school.programmers.co.kr/learn/courses/30/lessons/92342 풀이 라이언은 어피치를 (1) 최대한 큰 점수 차이로 이기려고 하고, (2) 어피치보다 한 발만 더 쏘면 그 점수를 얻을 수 있다. (3) 반드시 n발을 다 쏴야 하고 (4) 같은 점수 차이일 경우 더 낮은 점수를 많이 쏜 경우가 우선순위가 된다. 위의 조건을 만족할 수 있는 경우의 수가 없는 경우 [-1] 을 반환함. 각 점수에 대해서 화살을 쏜 개수를 비교해서 라이언이 쏜 게 더 많으면 라이언이 점수를 얻고, 라이언의 점수가 어피치와 같거나 작으면 어피치가 점수를 얻는다. 낮은 점수에 우선권이 있으니 낮은 점수(1점)부터 높은 점수(10점) 탐색한다. 이때 0점은 점수를 얻으....... (Publish Date: 2024-08-05)

[PGM/2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 (Lv2)
https://school.programmers.co.kr/learn/courses/30/lessons/42888 풀이 카카X오톡 오픈채팅방을 구현하는 느낌의 문제다. 크게 2가지가 로직을 구현해야 한다. (1) 채팅방 입장/퇴장/닉네임 변경 (2) 채팅방 기록. 우선 유저에 대한 정보들이 저장돼야 하는데 크게 유저 아이디와 닉네임만 저장하면 된다. 유저들은 유저아이디로 구분된다고 했다. 유저아이디를 DB 의 PK 로 생각하고 users 라는 HashMap 자료구조를 사용해 유저아이디를 키 값으로 사용했다. 닉네임은 값으로 저장했으며, 나중에 닉네임이 변경된다면 유저아이디로 해당 유저를 찾아 닉네임을 변경해주면 된다. 채팅방에 대한 기록은 순서를 지켜야 하고 중복도 허용해야 하므....... (Publish Date: 2024-08-04)

[PGM] 가장 긴 팰린드롬 (Lv3)
https://school.programmers.co.kr/learn/courses/30/lessons/12904 풀이 팰린드롬 여부를 확인하려면 서로 대칭 위치에 있는 문자열을 비교해야 한다. 모든 문자열이 같다면 팰린드롬이고 중간에 하나라도 다르다면 팰린드롬이 아니다. 모든 문자열을 다 비교할 필요 없이 중간에 하나만 아니면 바로 false 를 반환하는 방식으로 비교를 종료하는 방식이 효율적이다. 가장 긴 길이의 팰린드롬을 반환해야 하기 때문에 문자열의 길이인 n 부터 시작해서 n-1, n-2 로 줄여나가면서 팰린드롬을 찾는게 좋다. 코드 (Publish Date: 2024-08-03)

[PGM] 순위 (Lv3, 그래프)
https://school.programmers.co.kr/learn/courses/30/lessons/49191 풀이 순위를 매길 수 있으려면 현재 선수를 이긴 선수의 수 + 현재 선수에게 진 선수의 수 = 전체 선수 - 1(현재 선수) 여야 한다. 선수가 100명이기 때문에 각 선수에 대해서 단순하게 DFS 를 돌려서 구할 수도 있겠지만 선수의 수가 많다는 가정하게 DP 를 적절하게 섞었다. 단방향 그래프를 설정하면 해당 선수가 이긴 선수 / 진 선수를 구분해서 구할 수 있다. 여기서 주의해야 할 점은 2번 선수의 경우 4번 선수와 바로 연결되어 있는데, 동시에 3번 선수를 통해서도 4번 선수와 연결될 수 있다. 즉 4번 선수에게 이겼는지 / 졌는지에 대한 정보가 중복으로 구해질 수....... (Publish Date: 2024-07-31)

[PGM] 연속 펄스 부분 수열의 합 (Lv3)
https://school.programmers.co.kr/learn/courses/30/lessons/161988 풀이 펄스 수열을 곱한 경우의 수는 두 가지다. [1, -1, 1...] 와 [1, -1, 1...] 를 곱한 경우 뿐이다. 전체 배열에서 각각을 곱한 배열을 새롭게 구한 후에 구해진 배열에서 연속 부분 수열의 최대합을 구하면 된다. 사실 배열 길이가 1000 정도 되면 완전 탐색 돌리면 되는데 여기선 50만이기 때문에 불가능하다. 대신 양수랑 음수가 섞여있다는 걸 생각해볼 수 있는데 단순하게 생각해서 양수 음수 무작위로 더한 값이 최대가 되려면 양수는 많이 더해야 하고 음수는 많이 빼야 한다. 이 점을 이용했다. 우선은 연속된 부분 수열의 합이기 때문에 누적합으로 배열의 처음 ~....... (Publish Date: 2024-07-30)

스프링과 DI 컨테이너
면접에서 IoC 와 DI 에 대한 질문을 받은 김에(?) 한 번 간단하게 정리할 필요가 있을 것 같다. 우선 스프링은 대한민국에서 가장 많이 사용되는 백엔드 프레임워크다. 기본적으로 자바 기반이고 그렇다보니 객체 지향 개념을 가져와 활용하고 있다. 쉽게 설명하자면 객체들이 의존하고 있는 객체의 생성과 관리 등 모든 권한을 스프링에게 전적으로 위임하는 방식으로 설계하여 변경에 용이하고 확장 가능한 프로그램을 설계할 수 있도록 하고 있다. 그런데 왜 이런 방식을 택하게 됐을까? 객체 지향이란 객체 지향은 객체 간의 상호 작용, 즉 협력을 통해 프로그램을 개발하는 걸 말한다. 객체란 속성과 동작으로 정의된 대상을 의미하는데 객....... (Publish Date: 2024-07-29)

[PGM] 스티커 모으기(2) (Lv3, DP)
https://school.programmers.co.kr/learn/courses/30/lessons/12971 풀이 만약 원형 구조가 아니었다면 단순하게 숫자 하나를 떼고 바로 옆의 숫자는 건너뛰는 방식을 사용하면 됐을 것이다. 하지만 원형 구조이기 때문에 약간 더 고려할 부분이 생겼다. 결국 이것도 배열로 주어지고, 선형으로 탐색하게 되기 때문에 배열의 가장 끝에 가서 중요한 점은 첫 번째 요소를 선택했느냐 아니냐의 여부이다. 그래서 처음에는 배열의 첫 번째 값을 포함했는지 아닌지의 여부를 1 또는 0 으로 표현하여 같이 넘겨주는 방법을 생각했었다. 그러다보니 결국 첫 번째 요소를 포함했는지/아닌지 두 가지 경우로 나눠서 계산할 수 있겠다는 생각이 들었다. 먼....... (Publish Date: 2024-07-29)

flex 의 3가지 기본 옵션 (initial, none, auto)
Naver D2 의 flexbox로 만들 수 있는 10가지 레이아웃을 참고하여 작성된 글 입니다. flexbox 는 css3 부터 적용된 html 요소들의 배치하는 방식으로 기존의 float 방식에서 벗어나 간단하고 단순하게 레이아웃을 구성할 수 있다는 장점이 있다. 상위 flexbox 인 container 와 내부에 하위 요소들인 item 으로 구분할 수 있으며, 여기서는 상위에 하위 요소인 item 에 적용할 수 있는 flex 속성에 대해 알아본다. 양의 정수를 주는 방식 (flex : 1) 을 제외하고 디폴트로 줄 수 있는 값은 initial, none, auto 가 있다. 각각의 속성에 대해서 flex-grow, flex-shrink, flex-basis 의 값들이 기본적으로 정해져 있다. flex-grow 는 확장과 관련된....... (Publish Date: 2024-07-28)

[PGM/2021 KAKAO BLIND RECRUITMENT] 광고 삽입 (Lv3)
https://school.programmers.co.kr/learn/courses/30/lessons/72414 풀이 우선 시간 관련한 문제는 전부 초 단위로 변경한다. 계산하기 쉽게... 기준을 초 단위로 변경하면 시청자들의 누적 재생시간을 구하기 쉬워진다. 문제에서는 시청자들의 수에 따라 구간별로 나눠서 계산하고 있는데 결국에는 해당 범위내에서 초 단위로 따져서 모든 시청자 수의 누적합을 구하면 된다. 만일 00:00:10 ~ 00:00:30 사이에 시청자수가 1명이라면 해당 시간에서 누적 재생시간은 20초 x 1명 = 20초가 된다. 해당 시간(초) x 시청자 수 = 누적 재생시간이라는 공식이 나온다. 시간은 끝 시간에서 시작 시간을 빼면 되고, 시청자수를 구하는게 문제인....... (Publish Date: 2024-07-28)

[PGM/Summer/Winter Coding(~2018)] 기지국 설치(Lv3)
https://school.programmers.co.kr/learn/courses/30/lessons/12979 풀이 아파트의 상태는 (1) 기지국의 범위 내이거나 (2) 기지국의 범위 밖 2가지만 존재한다. 기지국의 범위 내에서는 기지국을 더 이상 설치할 필요가 없다. 기지국의 범위 밖이라면 다음 기지국이 있는 위치 내에 몇 개의 기지국을 설치해서 커버해야 한다. 결국 기지국이 없는 범위들에 대해서 최소 몇 개의 기지국이 필요한지만 계산하고 다음 범위로 넘어가면 된다. n의 최대가 2억이기 때문에 완전 탐색으로 하나씩 탐색하거나 백트래킹으로 모든 경우의 수를 고려하는 것은 불가능하다. 다행히 기지국이 설치된 위치가 오름차순으로 주어지기 때문에 차례대로 범위를 찾....... (Publish Date: 2024-07-26)

[PGM] 야근 지수 (Lv3)
https://school.programmers.co.kr/learn/courses/30/lessons/12927?language=java 풀이 남은 작업량들을 제곱한 값들의 합이 최소가 되기 위해서는 전체적으로 남은 작업량이 작아져야 한다. 어떤 특정값만 작아져서는 안 됨. 그러기 위해서는 가장 큰 값부터 작아지면 되는데 어디까지 작아져야 하는 가의 기준이 되는 값이 애매하다. 그래서 가장 큰 값을 1 줄이고, 그 다음으로 전체 정렬해서 다시 가장 큰 값을 구하고 1을 줄이고 이 과정을 반복하면 된다. 최대 10만이 될 수 있기 때문에 매번 일반 정렬을 했다가는 시간초과가 발생할 수 있으므로 힙 자료구조를 쓰는 우선순위큐를 사용한다. 코드 (Publish Date: 2024-07-24)

[자바 웹 프로그래밍 Next Step] AWS EC2 Ubuntu 환경 웹 서버 배포
자바 웹 프로그래밍 Next Step 3장 개발 환경 구축 및 웹 서버 실습 요구사항에서 원격 서버에 배포해야 하는 과정이 있다. 책에서는 우분투 리눅스 운영체제를 기반으로 하기 때문에 비슷한 환경 구축을 위해 AWS 서비스를 사용했다. 이 글은 AWS EC2 Ubuntu 환경에 Maven 으로 빌드된 자바 프로젝트를 배포하는 과정에 대한 기록. AWS EC2 배포의 대략적인 과정 EC2 는 컴퓨팅 서비스라고 하는데 쉽게 말해 걍 컴퓨터라고 생각하면 된다. 노트북, 데스크탑 이런 거 사서 운영체제 깔고 그 위에 카톡이든 뭐든 필요한 서비스 깔고 사용하는 것처럼, EC2 위에 운영체제 올리고 그 위에서 필요한 서비스들을 사용할 수 있다. 필요한 메모리나 자원....... (Publish Date: 2024-07-18)

[PCCP 기출문제] 2번 / 석유 시추 (JS)
https://school.programmers.co.kr/learn/courses/30/lessons/250136 풀이 (1) 석유 덩어리들을 찾아서 개수를 세고 (2) 열을 따라 조회하면서 가능한 석유 시추량을 찾는 문제이다. (1)은 그래프 탐색이고 (2)는 아주 단순한 구현이다. 그래프 탐색은 DFS/BFS 어떤 방식이든 상관없을 것 같아서 DFS 로 했는데 런타임 에러가 발생했다. 효율성 테스트라 n, m 범위에 제한이 없다보니 재귀 깊이 때문에 문제가 발생한 것 같았다. BFS 로 변경하고 나니 통과했다. 우선 각 석유 덩어리를 찾아 이어져있는 덩어리들에 번호를 매겼다. 이때 visited 배열을 따로 선언했다가, land 배열 위에 덮어씌우는 방식으로 변경해서 메모리와 시간을 줄였다. B....... (Publish Date: 2024-07-18)

[PGM/2024 KAKAO WINTER INTERNSHIP] 주사위 고르기 (Lv3, 조합/이분 탐색)
https://school.programmers.co.kr/learn/courses/30/lessons/258709 풀이 크게 2단계로 나눠서 구해야 한다. 먼저 주사위를 반으로 나누고 그 안에서 조합을 구해야 한다. 다음은 그렇게 구한 조합으로 구할 수 있는 모든 합을 구한다. 그런데 주사위 조합을 구할 때 보면 절반만 구하면 된다. (1, 2) 조합 vs (3, 4) 조합은 결국 (3, 4) 조합 vs (1, 2) 조합과 같으니 한 번만 대결해서 (1,2) 조합의 승리할 확률과 (3, 4) 조합의 승리 확률 중 더 큰 걸 선택하면 된다. 사실 이 문제에서 A, B 로 나누는 건 별 의미가 없고 결론은 어떤 주사위 조합이 가장 승리할 확률이 높냐는 것이다. 그래서 나올 수 있는 모든 주사위 조합 가운데 승리할....... (Publish Date: 2024-07-17)

[게시판 만들기] 게시글 수정/삭제 기능 구현
게시글 수정 게시글 수정은 상세 게시글 화면에서 이뤄진다. 수정 버튼을 누르면 게시글 수정 화면(View)을 조회한다. 수정할 때는 게시글 작성 시와 다르게 기존 게시글의 제목과 내용 정보가 필요하다. 아래의 시퀀스 다이어그램에서 위의 과정은 기존 게시글의 정보를 조회하기 위한 과정이다. GET 조회시 넘겨지는 게시글의 id 값을 통해 DB 에서 해당 게시글 객체를 반환한다. 반환된 게시글 객체는 edit-post.html 화면과 함께 반환된다. 게시글 생성과 수정의 큰 흐름 자체는 다르지 않다. form 에 제목과 내용을 입력하고 form 을 제출하는 것도 동일하고 POST 메서드로 처리하고 요청 후에는 다시 상세 게시글 조회로 넘어가는 것도 같....... (Publish Date: 2024-07-15)

[게시판 만들기] PUT/DELETE 요청 후 리다이렉트 되지 않는 문제
문제 상황 게시글 상세 페이지에서 게시글을 삭제하면 해당 게시글의 id 값을 전달하여 게시글을 삭제하는 기능 구현 해당 게시글이 삭제되면 메인 페이지로 이동할 수 있도록 redirect:/ 반환 405(Method Now Allowed) 에러 발생 : HTTP 메서드가 GET 으로 변경되지 않고 DELETE 상태 유지 컨트롤러 게시글 상세 페이지 게시글을 삭제하기 위해서 2가지 방법을 택함 임시 form 태그를 생성하고 내부에 button 을 만들어서 제출 → Form 제출 따로 button 을 만들어서 javascript 를 사용해 fetch() 로 api 요청 → 비동기 요청 폼 제출의 경우 현재 HTML 에서는 폼에서 GET/POST 메서드만 지원하기 때문에 그 외의 메서드(PUT/DELETE/PATCH) 를....... (Publish Date: 2024-07-15)

[게시판 만들기] H2 Embedded DB 연동 및 MyBatis 설정
H2 데이터베이스는 서버, 임베디드, 인메모리 세 가지 방식 중 하나를 택할 수 있지만 여기서는 간단하게 하기 위해서 임베디드 방식을 택했다. 임베디드 방식으로 구동하게 되면 어플리케이션이 실행될 때 내부에서 DB 가 같이 실행되는 형태이다. 공식 문서에서 표현된 구도는 아래와 같다. 우선 이 방식을 택한 이유는 따로 서버를 작동시킬 필요가 없고, 아직까지는 큰 규모의 프로젝트가 아니기 때문이다. 이 정도면 인메모리를 사용할 수도 있지 않냐고 하겠지만 인메모리는 서버가 종료되면 데이터도 휘발된다. 임베디드 방식은 로컬에 데이터가 저장되기 때문에 서버가 종료되어도 데이터가 휘발되지 않고 남아있게 된다. H2 Embedded DB....... (Publish Date: 2024-07-13)

[게시판 만들기] 개발 환경 세팅 / Thymeleaf 로 View 화면 구현
개발 환경 Java 21 Spring 6.1.10 / SpringBoot 3.3.1 Thymeleaf 3.1.2 Lombok 1.18.32 spring initializr 를 사용해 개발 환경을 구축했다. 추가한 dependency 는 spring web, thymeleaf, lombok 이다. 나머지는 자동으로 추가됨. 화면상 보여줘야 하는 부분은 타임리프로 구현하게 된다. 화면은 크게 전체 게시글 보기, 새 글 쓰기, 상세 게시글 보기 3가지가 대표적이다. Spring MVC 패턴을 따라 구현했기 때문에 우선 클라이언트의 요청을 처리하는 컨트롤러가 있게 된다. 여기서는 BoardController. 전체 게시글 View localhost:8080 주소를 요청하면 가장 먼저 보여지는 화면은 전체 게시글을 보여주는 화면이 된다. 나중에는 페이지네이션....... (Publish Date: 2024-07-12)

---
추천1

댓글목록

등록된 댓글이 없습니다.

회원로그인

접속자집계

오늘
1,653
어제
1,754
최대
3,753
전체
896,239

그누보드5
Copyright © tvcommercialsong.com All rights reserved.