백준 17298번 : 오큰수수열A의 원소 A_n에 대하여, m > n 이고 A_n < A_m을 만족하는 가장 작은 m (A_m = 오큰수)을 찾는 문제이다.입력된 값은 이전 입력값보다 클 수도 있고 작을 수도있다.입력된 값이 이전값 보다 작으면 이후에 입력될 다른
백준 10773번 : 제로입력이 0이 아니면 추가하고 0이면 이전 값을 지우는 전형적인 LIFO 문제이다.문제가 요구한 그대로 0이면 pop하고 0이 아니면 push하면 된다. 코드를 조금이라고 줄이기위해 result라는 총 합을 저장할 변수를 선언하고, push, p
링크텍스트랜덤한 문자열에서 열린 괄호가 쌍을 이루어 정상적으로 닫혔는지 확인하는 문제이다.다른 문자들은 신경쓰지 말고 열린 괄호를 읽으면 이를 push하고 닫힌 괄호를 읽으면 pop하여 비교하면된다. 만약 pop한 결과가 해당 괄호와 매칭된다면 계속하고, 매칭되는 값이
백준 1874번 : 스택 수열1~n까지 순서대로만 push 할 수있는 스택을 사용하여 수열을 만들때 어떤 순서로 push, pop해야 해당 수열을 만들수 있는지를 구하는 문제이다.입력으로 들어온 숫자는 head의 data보다 큰 경우와 작은경우 2가지 경우로 나눌 수
백준 10828번 : 스택스택을 구현하는 문제이다.스택은 LIFO 자료구조로 문제에서는 push, pop, size, empty, top 함수의 구현을 요구하였다. 스택은 연결리스트로 구현하였고, head가 null인 경우의 동작만 주의하면 어렵지 않은 문제이다.처음에
백준 1000번 : A+B입출력이 주 목적인 문제이다.Java의 경우 scanner를 사용한 입력이 일반적이지만 속도가 느려 추천하지 않는다.BufferedReader를 사용하면 보다 빠르게 입력을 받을 수 있다.그러나 String으로만 입력이되어 다른 타입으로 사용할
AOP가 필요한 상황 실행시간 측정은 핵심 관심 사항이 아니다. 그러나 핵심 로직에 섞여있어 유지보수를 어렵게 한다. 시간 측정 로직은 공통의 관심 사항이지만 별도의 공통 로직으로 만들기 매우 어렵다. 그래서 하나씩 다 일일이 변경해야 한다. 위의 경우같은 공통 관심 사항을 수행할 일이 있을때 AOP를 사용한다. AOP 적용 AOP(As...
스프링 데이터 JPA는 인터페이스 만으로도 Repository를 구현할 수 있다. 인터페이스가 JpaRepository를 extends하면 구현체를 자동으로 만들고 스프링 빈에 자동으로 등록한다. JpaRepository는 findAll, save, findById 같은 다양한 기본적인 CRUD가 선언되어있는 공통 인터페이스이다. 그러나 ...
Jpa는 EntityManager를 사용한다. insert query는 em.persist로 한다. select query @Id 어노테이션이 붙은 변수로 select 할때는 em.find(클래스 명, 변수)로 한다. 그렇지 않은 변수로 select 하는 경우 em.createQuery("query문", 클래스)로 한다. ...
H2 데이터베이스 실행 방법 : h2 - bin - h2w.bat 파일을 실행시킨다. JDBC URL에 파일 명을 적어 접근하면 애플리케이션과 웹 콘솔이 파일 충돌을 일으킬 수 있어 소켓을 통해 접근해야 한다. ex) jdbc:h2:~/test -> jdbc:
스프링 통합 테스트 @Test 어노테이션은 스프링과 관련 없는 작업코드만을 테스트할 때 사용함. DB 연결 정보같이 스프링 부트와 연동할 필요가 있는 코드의 경우 @SpringBootTest와 @Transactional 어노테이션을 test용 클래스에 붙인다. 통합 테스트를 할 경우 service나 repository는 직접 객체를 생성하는게 ...
root 호출은 @GetMapping("/") 어노테이션이 static - index.html 보다 우선순위에 위치한다. GET : URL을 그대로 쳐서 접속하는 방식, 조회할때 사용, @GetMapping 어노테이션 사용 POST : 데이터를 전달할때
스프링 빈 등록 방법1 : 컴포넌트 스캔 의존 관계 : 컨트롤러가 서비스를 통해서 동작한다. 즉, 컨트롤러가 생성될때 컨트롤러에 서비스가 할당된다. @Controller 어노테이션이 있으면 해당 클래스의 객체를 생성해서 컨트롤러 로써 스프링 컨테이너에 보관한다. @Autowired 어노테이션은 해당 생성자가 호출될 때 필요한 매개변수를 스프링 ...
Test 케이스 @Test 어노테이션은 해당 메서드가 테스트 메서드가 되어 독립적으로 실행될 수 있게 해준다. Test 코드는 서로간의 실행 순서가 없다. 즉, 서로 의존적으로 작성하면 안된다. @AfterEach 어노테이션은 Test 메서드가 실행된 후
정적 컨텐츠 정적 컨텐츠는 서버에서 html파일을 그대로 클라이언트로 전달하는 방식이다. static 폴더안에 원하는 html파일을 만들면 그대로 반영된다. 스프링은 먼저 url을 분석해 해당 관련 컨트롤러가 있는지 찾고 없으면 그때 static 컨텐츠를
스프링 부트 빌드 및 실행 cmd창을 열어 프로젝트 경로에 들어가 gradlew build를 실행한다. 하위에 build파일이 생기면 성공 build/libs로 이동해서 .jar파일이 생성된것을 확인하고 java -jar 파일명.jar을 하면 실행된다. gradlew clean을 하면 build 폴더가 사라진다.
Gradle의 라이브러리 관리 Gradle 같은 빌드 툴은 의존관계를 관리해준다. 즉, 하나의 라이브러리를 사용할 때 필요한 다른 라이브러리를 같이 설치해준다. IntelliJ 우측 상단에 Gradle 탭을 누르면 라이브러리 간의 의존관계를 한눈에 볼 수 있다. spring-boot-starter 스프링 부트에 관련된 모든 라이브러리를 포함...