분류 전체보기 290

Class로 클래스의 정보 얻어오기 (리플렉션)

인프런에서 스프링 입문 강의를 듣다 보니 .class라는 것이 많이 나와서, 이것이 뭔지 간단하게 정리해두고자 한다. 리플렉션(1), Class 클래스 리플렉션(Reflection)은 객체를 통해 클래스의 정보를 분석해내는 프로그램 기법입니다. (사전적 의미 : 거울 등에 비친, 반사) 클래스 파일의 위치나 이름만 있으면 해당 클래스의 정보를 얻어내고 joont.tistory.com 이 블로그 글이 도움이 많이 되었다. 리플렉션이란 리플렉션은 어떤 객체를 가지고, 그 객체에 해당하는 클래스에 대한 정보를 알아내는 것이다. 클래스를 정의해놓은 코드를 찾아가지 않아도, 그 클래스를 바탕으로 생성된 한 객체의 이름만 알고 있으면 객체를 이용하여 클래스의 정보를 분석해낼 수 있다. Class 자바에는 Class..

#12873 : 기념품

풀이방법 사용된 것: Deque 2022.08.02 덱을 만들고, 원형인 것처럼 작동하게 하면 된다. 덱을 만들어서 1부터 N까지의 정수를 넣어두면 준비 끝이다. 이제 문제의 상황을 시뮬레이션하면 된다. 백준이가 숫자만 외치고 그냥 다음 사람으로 넘어가는 것은, 덱의 첫 요소를 꺼내서 가장 뒷 순서로 보내는 것과 같다. deque.add(deque.poll()); 이렇게 하면 된다. 그러므로 for(int t=1; t

6-6. 스프링 데이터 JPA

JPA를 더 편리하게 만들어주는 라이브러리인 스프링 데이터 JPA를 간단하게 배우는 회차이다. JPA를 배우는 것만으로도 백엔드 코딩이 매우 편리해지는데, 스프링 데이터 JPA를 배우면 "이렇게까지 편해진다고?" 싶은 수준으로 좋다고 한다. 그러나 JPA를 제대로 배우지 않은 상태에서 스프링 JPA를 배우는 것은 금물이다! 요즘 JPA가 정말 중요하고, 필수로 배워야 한다고 해도 무방할 정도로 능률을 많이 올려주는 기술이므로 JPA를 먼저 제대로 배운 다음 스프링 JPA까지 배우면 좋을 것! 더보기 공부할 것이 굉장히 많다. 자바 공부도 틈틈이 더 해야 할 것 같고 (책을 사야 하나?) 일단은 스프링을 탄탄히 공부해야 하고 (시간이 없다면 자바는 스프링을 하면서 부족하다 느껴지는 부분만 취사선택하여 공부..

6-5. JPA

이번 회차에서는 기본적인 sql 쿼리까지도 자동으로 처리해주는 편리한 JPA를 배운다. ORM(Object-Relational Mapping)이란? JPA는 ORM을 한다. ORM은 자바의 객체와 관계형 데이터베이스의 데이터를 서로 짝지어주는 것을 의미한다. 자바에서 다루는 것은 객체에 담긴 필드와 메소드이고 관계형 데이터베이스가 다루는 것은 테이블에 담긴 데이터다. 그러므로 개발자의 입장에서 서로 맞물려 돌아가야 하는 양쪽의 요소들 사이에 차이가 발생한다. 원래는 자바 따로, 관계형 데이터베이스 따로 직접 관리해서 잘 어울려 작동하게 해주어야 한다. 그 작업을 대신 해주는 것이 ORM이다. ORM 덕분에, 개발자는 객체만을 사용하여 관계형 데이터베이스를 간접적으로 다룰 수 있다. ORM이 만능인 것은 ..

6-4. 스프링 JdbcTemplate

순수 JDBC보다 훨씬 단순하고 편리해진 JdbcTemplate라는 것을 사용해 레포지토리를 짜보는 회차이다. 순수 JDBC는 비효율적이어서 실무에선 거의 안 쓴다고 했는데, JdbcTemplate부터는 많이 쓰인다고 한다. 디자인 패턴 중에 template method pattern이라는 것이 있는데, 이걸 사용해서 디자인하였기 때문에 이름이 JdbcTemplate이라고 한다. JDBC에서는 모든 코드를 일일이 적어야 했기 때문에 반복되는 코드가 많았다. JdbcTemplate에서는 이런 반복되는 코드들을 줄여놓았다. 우리는 귀찮은 설정을 하나하나 해줄 필요 없이, 메소드 하나를 딱 호출해서 그 인자로 원하는 sql문과 sql문의 결과를 담아올 방식을 정해주기만 하면 된다. 훨씬 편리해졌지만, sql문..

6-3. 스프링 통합 테스트

데이터베이스까지 포함된 테스트를 해보는 회차. 테스트를 돌리고 나면 그 테스트를 돌리기 이전으로 DB를 롤백해주는 @Transactional 이라는 어노테이션을 배운다. 지금까지 만들었던 테스트들은 스프링과 관련 없이 순수 자바 코드로만 만든 것이라고 한다. 테스트를 돌리면 모든 것이 JVM 내에서 이루어진다고 한다. 사실 스프링 초보인 나의 눈으로는 코드를 읽고 그런 사실을 알아채기 힘들다. 강사님이 그렇다고 하니 그렇구나 할 뿐이다. 추측을 해보자면, 이제서야 시스템 메모리가 아닌 제대로 된 DB를 사용하기 시작했고, 이 DB에 관한 정보는 내가 쓴 코드가 아니라 스프링이 들고 있다. 이것을 이제부터는 테스트에 반영할 것이라서 이런 말씀을 하셨나 보다. 그리고 '스프링 DB 접근 기술' 챕터의 나머지..

6-2. 순수 JDBC

지금은 여러 가지 편리한 기술들이 개발되어서, 실무에서 순수 JDBC로 개발하는 일은 거의 없다고 한다. 하지만 공부삼아 맛을 볼 기회를 주시겠다고 한다. 몇 십 년 전 고대의 선배님들과 십여 년 전의 강사님은 순수 JDBC로 개발을 했는데, 매우 괴로웠다고 한다... 환경설정 build.gradle로 들어가서 jdbc 및 h2와 관련된 라이브러리를 추가한다. 이렇게 붙여넣으면 된다. 붙여넣어야 하는 내용은 강의자료에 있다. 요 오른쪽 위의 코끼리 새로고침 버튼을 눌러주면 프로젝트에 적용이 된다. 그 다음에는 resources 안에 있는 application.properties로 들어간다. spring.datasource.url=에다가는 요놈을 복붙해준다. 그 밑에는 spring.datasource.dr..

6-1. H2 데이터베이스 설치

저번 시간에 회원 가입과 회원 조회 기능을 다 만들었고 테스트하는 과정에서 이렇게 세 명의 회원을 가입시켰다. 제대로 된 데이터베이스의 필요성 그런데! 우리가 지금 쓰고 있는 저장소가 어떻게 생겼는가? 이렇게 리포지토리 내부의 Map 객체에다가 저장하도록 되어있다. 그리고 리포지토리 객체는 프로그램을 새로 돌릴 때마다 매번 새로운 객체(bean)으로 만들어진다. 따라서, 서버를 껐다 켤 때마다 모든 데이터가 날아간다! 다시 돌려보면 진짜로 날아간다. 이제는 서버를 껐다 켜도 날아가지 않는 제대로 된 데이터베이스를 마련할 때가 되었다. H2 데이터베이스 설치 이번 시간에는 H2 데이터베이스를 설치한다. 되게 단순하고, 가볍고, 웹으로 콘솔을 제공하기 때문에 편하며, 교육용으로도 좋은 데이터베이스라고 한다...

5-3. 회원 웹 기능 - 조회

이번 회차에서는 오른쪽의 '회원 목록'을 눌러서 들어가는 /members 페이지를 만들 것이다. @GetMapping 메소드 만들기 list 라는 메소드를 만들고 @GetMapping("/members") 를 달아준다. 딱 보면 알 수 있듯이 여기 있는 전체 회원 조회 기능을 쓸 것이다. 이렇게 써주고 ctrl+alt+V 하면 짜잔 IntelliJ 최고 모델에다가 리스트를 통째로 담아준 뒤에 members/memberList.html 을 찾아들어가도록 리턴해준다. memberList.html 만들기 members 디렉토리 하위에 이렇게 새 html 을 만들고 내용을 복붙해준다. 이 부분의 내용을 살펴보자면, 마치 for문을 돌리듯이 아까 우리가 모델에 담아 전송해준 members라는 리스트의 모든 각각의..

5-2. 회원 웹 기능 - 등록

홈 화면에 하이퍼링크만 만들어놨던 이 '회원 가입', '회원 목록' 두 페이지 중에서 '회원 가입' 즉 /members/new 페이지를 만들어볼 것이다. 이 페이지는 회원 등록을 하는, 즉 사용자가 데이터를 서버에 제출하는 페이지이기 때문에 @GetMapping 만 쓰는 것이 아니라 @PostMapping도 써야 하고 form도 써야 한다. @GetMapping 메소드 만들기 MemberController를 열어서 다음과 같은 메소드를 추가한다. @GetMapping("/members/new") -> /members/new 의 경로로 GET 요청이 들어왔을 때 실행된다. return "members/createMemberForm"; -> templates 디렉토리 하위의 members 디렉토리 안에 있는..