[Programmers Level 2] 올바른 괄호
·
Algorithm
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫번째 시도 넘어온 괄호 문자열을 split으로 자른 후, 열린 괄호일 경우 스택에 push, 닫는 괄호일 경우 pop해서 스택이 비어있는지 여부를 반환하는 방법으로 시도했다. import java.util.*; class Solution { boolean solution(String s) { String[] temp = s.split(""); Stack stack = new Stack(); // 닫는 괄호로 시작하거나 여는 괄호로 끝나면 false 반환 if (temp[0].equals(")") || ..
[Programmers Level 2] 전화번호 목록
·
Algorithm
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫번째 시도 해시를 사용할 방법이 떠오르지 않아서 일단 배열의 반복문을 사용해서 시도해봤다. import java.util.*; class Solution { public boolean solution(String[] phone_book) { /* 1. 길이 순으로 정렬 2. 가장 짧은 길이의 번호를 기준으로 각 문자열의 substring을 비교 3. 루프를 한번 돌고, 다음 인덱스로 넘어가서 반복 */ // 문자열 길이 순으로 정렬, 짧은 문자열이 긴 문자열로 시작하는 경우는 없음 Arrays.sort..
AWS EC2 스프링 부트 프로젝트 gradlew test 오류 해결
·
devlog
😥 상황스프링부트로 작성한 프로젝트를 배포하기 위해 ec2 서버에 올리는 과정에서 github에 push하고 clone까지는 되었으나 ./gradlew test 입력 시 오류가 발생했다.. 에러 뜬 상황을 자세히 보니 constructor, getter 부분에서 오류가 나길래 lombok 문제인 것 같았다. (사실 에러 메세지를 제대로 확인하지 않았을 때는 자바를 인식하지 못하는 줄 알고 환경변수 설정을 했지만 오히려 다른 에러가 발생했다..ㅎㅎㅎ) 💡 해결스프링 부트 프로젝트에 lombok 플러그인을 설치했기 때문에 기존 build.gradle에는 implementation lombok만 해주었었다.implementation('org.projectlombok:lombok') lombok은 컴파일 시..
[Spring] MVC 1편 (10) - 실용적인 스프링 MVC
·
Spring
📌 @RequestMapping 스프링에서는 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러를 사용할 수 있다. 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 애노테이션 기반의 컨트롤러를 지원하는 각각 RequestMappingHandlerMapping과 RequestMappingAdapter이다. 실무에서는 이 방식의 컨트롤러를 사용한다! 회원 등록 폼 @Controller public class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form") public ModelAndView process() { return new ModelAndView("new-form"); } } @Controller : ..
[Spring] MVC 1편 (9) - 스프링 MVC 프레임워크 구조
·
Spring
📌 스프링 MVC 구조 ✅ 동작 순서 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러를 조회한다. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다. viewResolver 호출: 뷰 리졸버를 찾고 실행한다. View 반환 : 뷰 리졸버가 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다. 뷰 렌더링 : 뷰를 통해 뷰를 렌더링한다. 📌 간단한 핸들러 매핑과 핸들러 어댑터 사용해보기 OldController @Compon..
[Spring] MVC 1편 (8) - MVC 프레임워크 만들기 v4,v5
·
Spring
v1, v2, v3 [Spring] MVC 1편 (7) - MVC 프레임워크 만들기 v1, v2, v3 📌 프론트 컨트롤러 ✅ 프론트 컨트롤러 도입 전 프론트 컨트롤러 도입 전에는 각 컨트롤러에서 공통 로직을 구현해줘야 했다. ✅ 프론트 컨트롤러 도입 후 모든 요청 메세지는 공통 로직이 구 suaring.tistory.com 📌 MVC 프레임워크 만들기 ✅ v4 - 단순하고 실용적인 컨트롤러 v3 컨트롤러는 서블릿의 종속성을 제거하고 뷰 경로의 중복을 제거하여 잘 설계된 컨트롤러이다. 그러나 개발자 입장에서 항상 컨트롤러에서 ModelView 객체를 생성해서 반환해야 하는 부분이 번거롭다. 이번 버전에서는 조금 더 실용적인 방법으로 리팩토링 해본다. 기본적인 구조는 v3와 같지만, 각 컨트롤러는 이제 M..
[Spring] MVC 1편 (7) - MVC 프레임워크 만들기 v1, v2, v3
·
Spring
📌 프론트 컨트롤러 ✅ 프론트 컨트롤러 도입 전 프론트 컨트롤러 도입 전에는 각 컨트롤러에서 공통 로직을 구현해줘야 했다. ✅ 프론트 컨트롤러 도입 후 모든 요청 메세지는 공통 로직이 구현되어 있는 프론트 컨트롤러로 들어온다. 프론트 컨트롤러는 요청에 맞는 컨트롤러를 찾아 호출해준다. 프론트 컨트롤러에서 요청 메세지를 매핑 시켜주면, 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다. 스프링 웹 MVC의 핵심도 FrontController → 스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있음! 📌 MVC 프레임워크 직접 만들어보기 ✅ v1 - 프론트 컨트롤러 도입 HTTP 요청이 들어오면 프론트 컨트롤러는 요청의 URL을 바탕으로 매핑 정보에서 요청 ..
[Spring] MVC 1편 (6) - MVC 패턴 적용
·
Spring
📌 MVC 패턴 사용 이유? 너무 많은 역할 : 하나의 파일에서 비즈니스 로직을 수행하고 뷰 렌더링까지 처리하면 유지보수가 어렵다. 변경의 라이프 사이클 : 비즈니스 로직과 뷰 렌더링의 변경의 라이프 사이클이 다르므로 한 파일에 두면 유지보수하기 좋지 않다. 기능 특화 : JSP는 뷰 템플릿으로 화면을 렌더링하는데 최적화 되어있다. 📌 Model-View-Controller 컨트롤러 : HTTP 요청을 받아 파라미터를 검증하고, 비즈니스 로직을 실행한다. 뷰에 전달할 결과 데이터를 조회해서 모델에 담는 역할을 한다. 모델 : 컨트롤러가 담은 데이터를 뷰에 전달한다. 뷰는 덕분에 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링하는 일에 집중할 수 있다. 뷰 : 모델에 담겨 있는 데이터를 사용해..
[Spring] MVC 1편 (5) - ​ 서블릿, JSP를 사용한 회원 관리 웹 애플리케이션
·
Spring
📌 회원 관리 웹 애플리케이션 요구사항 회원 정보 : username(이름), age(나이) 기능 요구사항 : 회원 저장, 회원 조회 📌 서블릿으로 구현하기 ✅ 회원 등록 폼 - Servlet @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletRespon..