전체 글 27

회원 관리 예제 - 백엔드 개발

비즈니스 요구사항 정리비즈니스 요구사항은 단순하게 할 것데이터: 회원ID, 이름기능: 회원 등록, 조회상황: 아직 DB 선정이 안됐는데 개발을 해야함웹 어플리케이션 구조컨트롤러: 웹 MVC의 컨트롤러 역할서비스: 핵심 비즈니스 로직 구현(회원은 중복 가입이 안된다는 코드 구현 등)리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨클래스 의존관계회원은 interface로 설계(DB가 선정되지 않았기 때문), 구현체는 메모리 모드로 단순하게 저장 -> 향후에 구체적인 DB가 선정된다면 바꿔뀌기 위해 인터페이스로 구현 회원 도메인과 리포지토리 구현domain package 만들고, Member C..

스프링 웹 개발 기초

웹을 개발할 때는 세 가지 방법이 있음1. 정적 컨텐츠파일을 그대로 웹 브라우저에 내려주는 것2. MVC와 템플릿 엔진과거의 JSP, PHP이 템플릿 엔진인데,  HTML을 그냥 주는게 아니라 서버에서 HTML을 코딩해서 동적으로 바꿔줌, 그걸 하기 위해 MVC 패턴을 사용함3. APIJSON 데이터 포맷으로 클라이언트한테 데이터를 전달view.js, react를 프론트에 쓸 때, 서버끼리 통신할 때 사용한다. 정적 컨텐츠스프링 부트는 정적 컨텐츠 기능을 자동으로 제공함(/static에 html 만들기)url에도 html 파일명을 입력하면 웹에서 확인 가능내장 톰캣 서버가 요청을 받고, 스프링한테 그 요청을 넘김-> controller가 매핑된 uri를 찾음-> 없으면 resources의 html을 찾음..

View 환경설정

welcome 페이지 만들기resources/static/ 에 index.html을 넣어두면 자동으로 welcome page가 됨 Hello hello 위의 내용을 가진 index.html을 만들어준다.이후에 서버를 재시작 해주면, 저번의 localhost:8080에 html 내용이 뜨게 된다.hello 링크를 누르면, 아무것도 없어서 다시 Error 페이지가 나온다. spring.io의 welcome page 설명을 보면, static의 index.html을 먼저 찾고, 없으면 template의 index를 찾는 방식으로 동작한다고 한다.이 index.html은 정적파일이고, 템플릿 엔진을 사용하면 loof를 넣거나 등의 동작으로 원하는 대로 모양을 바꿀 수 있다. 1. controller 작성..

라이브러리

실제 라이브러리, external library로 들어가보면 2개밖에 dependencies에 추가하지 않았는데도 엄청 많음-> gradle과 같은 관리 도구들은 라이브러리 의존을 관리해줌EX. starter-web을 dependencies에 추가한다면, web에 필요한 tomcat도 함께 가져옴 (타고 타고 들어가서 spring core 까지)오른쪽 탭의 Gradle > dependencies > compilePath에서 찾아서 보면 의존성을 구조적으로 알 수 있음끝에 (*)로 표시되어 있으면 중복된 라이브러리tomcat: WAS를 서버에 설치한 후, 거기에 자바 코드를 밀어넣어 웹서버 / 개발 라이브러리를 분리시켰음,요즘에는 소스 라이브러리에서 WAS를 들고 있음spring boot starter에 ..

Spring 환경 세팅하기

1. IDE 설치intelliJ 사용3. 스프링 부트 프로젝트 만들기https://start.spring.io/ ProjectMaven VS Gradle: 둘다 필요한 라이브러리와 빌드를 관리해주는 툴Spring Boot VersionSNAPSHOT, M1: 정식 릴리즈는 되지 않았고 개발 단계Group보통 기업 도메인 명Artifact빌드 결과물(프로젝트명)Dependencies어떤 라이브러리를 import할 것인가- spring web- Thymeleaf : html을 만들어주는 template 엔진3. IntelliJ에서 오픈다음과 같이 프로젝트를 열면 JDK를 다운로드 할 수 있다.여기서는 spring boot 프로젝트를 만들 때와 동일하게 17을 선택했다. .idea인텔리제이가 사용하는 파일들s..

구름톤 챌린지 DAY 11 - 통증(2)

오늘 문제는 지난주에 너무 쉽게 풀었던.. 통증을 진화한 버전이다. 통증1에서 언급했던 대로 아이템의 수치끼리 배수 관계가 아니며, 통증을 0으로 만들 수 없다면 -1을 출력하라는 조건이 더 붙었다. 개인적으로는 이게맞지~ 싶으면서도 조금 어려웠던 것 같다. 그래도 웬일인지 머리가 좀 잘돌아가서..? 빠르게 해결을 보았다. 결과는 정답! 해설은 해설지가 올라온 후에 올리겠다.

구름톤 챌린지 DAY10 - GameJam

오늘 공지사항을 봤는데, 라고 나와있어서 해설 강좌가 공개될 때까지 올리지 않기로 했다. (근데 해설과 관련된 내용은 공유하지 말라고 하는데, 그럼 블로그에 내가 푼 코드도 올리면 안되는 걸까? 문의 해봐야겠다) 문의 해본 결과, 해설지와 코드 그대로를 올리는 게 금지라고 한다. 그래서 개인 해설은 괜찮다고 한다! 그래서 일단은, 오늘 문제 풀면서 느낀점! 오늘은 GameJam을 풀어봤는데, 예시 2가 이해가 안가서 문의를 했다. Q&A게시판이 있던데 거기는 글 작성 버튼이 없어서 1:1 문의로 했다. Q&A 게시판 사용법도 여쭤봤는데 친절하게 답해주셨다. 우측 하단에 Q&A가 조그맣게 있는 걸 볼 수 있고, 옆면에 < 로 열 수 있는 공간이 있는데 거기도 Q&A이다. 문의 하고 나니 Q&A에 질문이 올..

구름톤 챌린지 DAY9 - 폭탄 구현하기(2)

문제) N크기의 정방형 board에 0, #, @가 있다. 이 board에 폭탄을 떨어뜨리는데, 폭탄은 떨어진 곳 + 상하좌우에 영향을 준다. 땅의 상태에 따라 폭탄 값이 변하는데, 0은 +1, #은 변화 없음, @은 +2씩 변화한다. 모든 폭탄이 떨어진 후 가장 큰 폭탄 값을 구하라. 구현 방법) 1. board에는 0을 모두 채우고, #와 @의 위치만 받아서 저장한 후 폭탄의 범위와 비교해서 땅의 상태에 따라 다르게 업데이트 한다. 2. board에는 폭탄 값을, board_status에는 땅의 상태 값을 넣어서 마찬가지로 상태 값을 보고 다르게 업데이트한다. 구현) 처음엔 방법1로 했다가 잘 되는데 계속 timeout이 떴다. 아무래도 struct나 vector로 #과 @의 위치를 받아서 비교하고 ..

구름톤 챌린지 DAY8 - 통증

문제) 통증이 주어지는데, 이를 0으로 만드는게 목표이다. 통증을 줄일 수 있는 아이템은 bandage, medicine, painkiller가 있고, 각각 1, 7, 14만큼 통증을 줄여준다. 통증을 0으로 줄이기 위한 아이템의 최소 개수를 구하라. 문제 해석) 자판기 돈 거슬러주는 문제같다. 구현 방법) 통증(N)을 14로 나누고, 그의 나머지를 7로 나누고, 그의 나머지를 1로 나눈다. 먼저 가시성, 가독성을 위해 enum값으로 각각의 아이템의 수치를 부여한다. 입력값을 받는다. 먼저 N을 painkiller로 나누고 몫(개수)는 최종 답인 leastItem에 더해준다. 그 후 위의 나머지는 다시 N이 되고, 그 N을 medicine을 나누고, 몫은 leastItem에 더해준다. 그의 나머지는 다시..

구름톤 챌린지 DAY7 - 구름 찾기 깃발

문제) 한 변의 길이가 N인 게임판에서, 어떤 칸에는 구름이 그려져 있고, 우리는 구름이 그려져 있지 않은 칸에 깃발을 꽂아 주위에 구름이 몇개 있는지 나타낸다. 이때 입력값으로 받은 K와 같은 깃발이 몇개 있는지 구하라. 문제 해석) 지뢰 찾기 게임에서, 지뢰가 아닌 칸을 클릭하면 주위에 있는 지뢰의 개수를 알려주는 숫자가 나타난다. 이걸 구현하면 된다. 구현 방법) 1. 전체 순회 하면서 0인 칸에 대하여, 주위 칸에 1이 있으면 그걸 counting, 2. counting한 숫자를 vector에 넣어서 K값과 비교하며 숫자 세기 N, K는 받아와서 예외를 처리해준다. C++에서 동적 배열은 반복문을 통해 이중 포인터로 만든다. 위와 같이 먼저 new로 할당을 해준 후에, 반복문과 cin으로 입력값을..