inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 1기] BE 1주차 발자국

이용수
0

인프런 워밍업 클럽 1주차 발자국

서론

IT 취준생 톡방에서 우연히 워밍업 클럽에 대해 정보를 얻을 수 있었고, 내가 들을만한 좋은 강의가 있을까 찾아보니 마침 최근에 포트폴리오 때매 관심 있었던 스프링으로 직접 서버를 배포하는 방법이 강의 주제로 있어서 신청하게 되었다.

무엇보다 혼자 강의를 듣는게 아닌 디스코드 커뮤니티에서 서로 물어보며 강의를 같이 듣는다는 것이 흥미 있었고 모든 과정을 수강 완료하면 인프런 포인트로 5만이나 환급된다는 것이 마음에 들었다.

앞으로 강의와 스터디를 하면서 배운 내용을 잊지 않도록 주마다 개인 블로그와 인프런 블로그에 정리하려고 한다.

섹션 0 : 소개와 준비, 수업자료

강의 소개 영상

강의 자료(완성된 코드)

환경 설정하기

스프링 프로젝트를 시작하는 첫 번째 방법

image

섹션 1 : 생애 최초 API 만들기

Java를 공부하기 전에 알아두면 좋을 것들 #1 (JVM, JDK)

Java를 공부하기 전에 알아두면 좋을 것듯 #2 (빌드, 빌드툴)

스프링 프로젝트를 시작하는 두 번째 방법

image

@SpringBootApplication과 서버

네트워크란 무엇인가?

HTTP와 API란 무엇인가?

GET API 개발하고 테스트하기

POST API 개발하고 테스트하기

유저 생성 API 개발

유저 조회 API 개발과 테스트

Section1 정리.

섹션 2. 생에 최초 Database 조작하기

Database와 MySQL

MySQL에서 테이블 만들기

테이블의 데이터를 조작하기

Spring에서 Database 사용하기

spring:
datasource:
  url: "jdbc:mysql://localhost/library" // jdbc:mysql:// -jdbc 로 mysql에 접근
  username: "[계정 명]"
  password: "[계정 비밀번호]"
  driver-class-name: com.mysql.cj.jdbc.Driver // 데이터베이스에 접근하기 위한 프로그램
private final JdbcTemplate jdbcTemplate; // jdbcTemplate를 이용해 SQL을 날리는 형태로 변경.

public UserController(JdbcTemplate jdbcTemplate) {
  this.jdbcTemplate = jdbcTemplate; // 생성자를 만들어 jdbcTemplate을 파라미터로 넣으면, 자동으로 들어옴.
}
@PostMapping("/user") // POST /user
public void saveUser(@RequestBody UserCreatedRequest request) {
  String sql = "INSERT INTO user (name, age) VALUES (?, ?)"; // SQL을 만들어 문자열 변수로 저장함.
  jdbcTemplate.update(sql, request.getName(), request.getAge()); // INSERT, UPDATE, DELETE 쿼리에 사용되는 update 함수 정의
}
// 첫 파라미터로 sql을 받고, ?를 대산할 값을 차례로 넣으면 됨.
@GetMapping("/user")
  public List<UserResponse> getUsers() {
      String sql = "SELECT * FROM user";
      return jdbcTemplate.query(sql, new RowMapper<UserResponse>() {
          @Override
          public UserResponse mapRow(ResultSet rs, int rowNum) throws SQLException {
              long id = rs.getLong("id");
              String name = rs.getString("name");
              int age = rs.getInt("age");
              return new UserResponse(id, name, age); // UserResponse에 생성자 추가
          }
      });
  }
// jdbcTemplate.query(sql, RowMapper 구현 익명 클래스)

유저 업데이트 API, 삭제 API 개발과 테스트

유저 업데이트 API, 삭제 API 예외 처리 하기

String readSql = "SELECT * FROM user WHERE id = ?"; // id를 기준으로 유저가 존재하는지 확인
boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty(); // SELECT의 결과가 있으면 0으로 변환되며 결론적으로 id가 있으면 0이 있는 리스트 반환, id가 없으면 아무겂도 없는 리스트 반환.
if (isUserNotExist) { // 유저가 존재하지 않으면 예외를 던진다.
  throw new IllegalArgumentException();
}

[업데이트, 삭제 테스트 포스트맨 획인해보기]

Section2 정리

섹션 3. 역할의 분리와 스프링 컨테이너

좋은 코드(Clean Code)는 왜 중요한가?

Controller를 3단 분리하기 - Service와 Repository

1주차 과제

과제 1번 : https://www.inflearn.com/blogs/7658

과제 2번 : https://www.inflearn.com/blogs/7692

과제 3번 : https://www.inflearn.com/blogs/7716

1주차 후기

지난주 사전 OT 부터 시작해서 벌써, 인프런 워밍업 클럽 과정의 1주차가 마무리됬다.

이번 주차에서는 섹션 0 부터 섹션 3의 일부분의 강의를 수강할 수 있었고, 1차 중간점검 시간을 가질 수 있었다.

간단하게 각 섹션 별로 강의의 주제를 다시한번 상기하고 어떤걸 배우고 느꼈는지 확인해보려고 한다.

섹션 0의 주제 : 소개와 준비, 수업 자료

강의 소개를 들으면서 서버 개발자, 백엔드 개발자가 되기 위해선 다방면에서 부족함이 없어야 한다는 점에 예상치 못하게 공감을 받을 수 있었다.

강의 자료 또한 섹션별로 적절하게 준비되어 사전에 어떻게 공부를 진행하고 회고록을 작성해야 할지 가이드 라인이 되기도 했다.

환경 설정을 진행하면서 PostMan라는 새로운 도구에 대해 알게 되었고, 오랜만에 다루어본 MySQL도 꺼내볼 수 있었다.

섹션 1의 주제 : 생애 최초 API 만들기

자바로 프로젝트를 진행하기 전에 JVM과 JDK에 대해 알아보고, 빌드의 개념과 빌드 툴의 종류에 대한 내용을 정리하면서 다시 한번 개념적인 부분을 정립할 수 있었다.

간단하게 스프링 프로젝트를 시작하고 실행해보았고, 강의 중간에 네트워크, IP, 도메인, 포트, HTTP 요청과 응답 구조, 클라이언트 - 서버 구조, API와 같은 기반 지식에 대해 설명을 들을 수 있었다.

강의 주제에 맞게 Spring Boot를 이용해 기본적인 GET API와 POST API를 만들어보고 어떤 원리로 동작하는지 알아볼 수 있었다.

섹션 2의 주제 : 생애 최초 Database 조작하기

이전 섹션에서 수행한 과정의 문제점인 서버 재실행시 데이터가 초기화 되는 부분에 관련하여 컴퓨터의 디스크와 메모리 차이를 이해하면서 Database에 저장하는 것의 필요성을 이해할 수 있었다.

IntelliJ와 MySQL을 연결하는 방법을 배웠고, 생애 최초로 조작하는건 아니지만 SQL을 이용해 MySQL Database를 조작하는 기본적인 방법에 대해 다시 상기시킬 수 있었다.

기존에 만들어둔 스프링 서버의 API를 변경하여 Database에 접근하고 데이터를 저장, 조회, 업데이트, 삭제하는 방법에 대해 배웠고, API의 예외 상황에 대해 예외를 처리하는 과정을 학습할 수 있었다.

섹션 3의 주제 : 역할의 분리와 스프링 컨테이너

하나의 컨트롤러 함수에 수많은 기능이 몰려있으면 생기는 문제점에 대해 인식하면서, 좋은 코드가 왜 중요한지 이해할 수 있었고, 이전 섹션에서 작성한 Controller 코드를 직접 Controller-Service-Repository로 분리하면서 어떻게 하면 좋은 코드로 리팩토링 할 수 있을지 고민하는 과정을 겪었다.

1차 중간점검

커뮤니티로 사전에 코치님에게 다양한 질문을 올려 답변을 해주는 실시간 Q&A를 진행했다. 다양한 분야에서 종사하는 강의생분들이 질문을 올려주셨고, 솔직히 말하면 내가 겪은 질문이여서 공감이 되기도 했고, 내가 미래에 겪을 질문이라서 과연 어떻게 답변해주실까 궁금하기도 했다.

강의 내용에 관한 현업에서의 추가적인 질문도 있었지만, 대부분 진로나 취업의 과정에서 현업자의 시각에 대해 조언을 요청하는 질문이 많았다. Q&A 시작전에는 마땅한 질문이 생각나지 않았는데, 코치님의 답변을 듣고 몰입이 되면서 궁금한 부분이 생겨나기도 했다.

강의 막바지에 내가 물어본 질문은

"깃허브 블로그에 개인 포트폴리오 부분을 추가해서 기업 지원할때 링크를 첨부하려고 하는데 개인 블로그를 오픈해두는게 좋을까요?"

였다.

질문하게된 이유는 개발자로 지원할때 보통 PDF 파일이나 노션 링크로 포트폴리오를 등록하는 경우가 대부분인데, 나는 깃허브 블로그를 운영중이라 깃허브 블로그의 메인페이지를 포트폴리오 화면으로 바꾸어 노션 링크를 대신하려고 준비중이였다. 이 과정에서 하나의 고민거리가 있었는데 앞서 과정을 진행하면 포트폴리오 화면을 통해 개인 블로그로 이동할 수 있었는데, 과연 개인 블로그를 오픈해두는 것이. 지원하는 과정에서 메리트가 있을지 디메리트가 있을지 였다.

코치님이 조언해주신 부분은 포트폴리오 화면으로 프로젝트의 진행 과정 중 일어났던 과정을 잘 정리할 수 있으면 개인 블로그를 첨부하지 않아도 될것 같다고 하셨고, 포트폴리오 화면으로 충분히 전달하지 못한 경우에는 블로그를 사용하여 보여주는 것도 괜찮다고 하셨다. 앞으로 어떻게 포트폴리오를 준비할지 좋은 조언을 주셨다고 생각한다.

마무리

아직 1주차 이지만 전반적으로 강의에 만족하고 있으며 강의 내용도 잘 따라가고 있다고 생각한다. 중간 점검 과정을 통해 코치님에게 좋은 조언을 받기도 했고, 남은 과정도 열심히 진행해서 적어도 강의 주제인 자바-스프링-서버-배포는 확실하게 기반을 다지겠다고 마음을 가졌다.

백엔드 인프런 워밍업 백엔드

답변 0