블로그

전다윤

[인프런 워밍업 스터디 클럽 1기 BE] 세번째 발자국

Section - 6 생애 최초 배포 준비하기 배포란? 배포최종 사용자에게 SW를 전달하는 과정전용 컴퓨터에 Spring과 MySql 등이 설치되고 코드가 작성된 우리의 서버를 옮겨 실행시키는 것이다.AWS(Amazon Web Service)같은 클라우드 서비스에서 서버를 빌릴 수 있다. Profile똑같은 서버 코드를 실행시키지만 실행 환경에 따라 설정을 다르게 한다. 데이터베이스 설정, 외부 API 키 등...똑같은 서버 코드를 실행시키지만, local 이라는 profile을 입력하면, H2 DB를 사용하고, dev 라는 profile을 입력하면 MySQL DB를 사용하게 한다. H2 DB경량 Database로 개발 단계에서 많이 사용하며 디스크가 아닌 메모리에 데이터를 저장할 수 있다. 데이터가 휘발될 수 있다. 개발 단계에서는 변경이 잦기 때문에 오히려 휘발 되는 것이 장점일 수도 있다.application.yml 수정spring: config: activate: on-profile: local datasource: url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER" username: "sa" password: "" driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true dialect: org.hibernate.dialect.H2Dialect h2: console: enabled: true path: /h2-console --- spring: config: activate: on-profile: dev datasource: url: "jdbc:mysql://localhost/library" username: "root" password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: none properties: hibernate: show_sql: true format_sql: true dialect: org.hibernate.dialect.MySQL8Dialect git과 github란? git코드를 쉽게 관리할 수 있도록 해주는 버전 관리 프로그램다양한 버전으로 개발된 프로그램들을 손쉽게 합치고 관리해 준다.GitHubgit으로 관리되는 프로젝트의 코드가 저장되는 저장소GitHub에 저장하는 이유내 컴퓨터에 있는 코드는 모종의 이유로 소실 될 수 있다.배포 과정에서 소스 코드를 옮길 때 활용할 수 있다. git 기초 명령어작성한 코드 원격 저장소에 올리기# 해당 프로젝트를 git이 관리하도록 함 git init # github 저장소와 git 프로젝트를 연결 git remote add origin [repository 주소] # 모든 파일을 추가 git add . # 특정 파일/폴더만 추가 git add [파일/폴더 이름] # 현재 add한 상태를 확인 git status # 현재 add된 파일들을 다 제거 git resest # add한 파일을 메시지와 함께 묶는 커밋 git commit -m “메시지” # 커밋한 파일을 github 저장소로 보냄 git push # git push 하는 경우 최초 1회는 반드시 실행해주어야 함 git push --set-upstream origin master.gitignore이 파일 안에 작성된 폴더나 다른 파일들이 git에 의해 추적되거나 관리되는 것을 방지함build/ .gradle/ .idea/ AWS EC2Elastic Compute Cloud탄력적으로 사용할 수 있는 원격 컴퓨터언제든지 필요할 때 빌리고 반납할 수 있다.Section - 7 생애 최초 배포하기 EC2 접속방법다운로드 받은 키 페어(pem key)를 이용하는 방법접속하려는 EC2의 IP 주소다운로드 받은 키 페어 접속하기 위한 프로그램(git CLI or Mac Terminal) 키 페어의 권한을 닫아준다. (보안 처리)chmod 400 경로/키페어명.pem보안 처리가 되어야만 접속이 가능하다. 만약, 처리가 되지 않고 접속을 시도하면 unprotected private key file을 사용하고 있다며 접근 자체가 거부 된다.접근 명령어ssh -i 경로/키페어명.pem ec2-user@IPAWS 콘솔을 활용하는 방법AWS ec2 웹사이트에 접속해서 연결 버튼을 통해 연결한다.기본적인 리눅스 명령어# 폴더를 만드는 명령어 mkdir folder1 # 현재 위치에서 폴더나 파일을 확인하는 명령어 ls # 조금 더 자세한 정보를 확인 ls -l drwxrwxr-x 2 ec2-user ec2-user 6 # d : folder1은 폴더이다. # r : 읽는 권한, w : 쓸 수 있는 권한, x : 실행 권한 # rwx/rwx/r-x # 폴더 소유자의 권한 / 폴더 소유 그룹의 권한/ 아무나 접근했을 때의 권 # 2 : 폴더에 걸려 있는 바로가기 개수 # ec2-user : 폴더 소유주의 이름 # ec2-user : 폴더 소유 그룹의 이름 # 6 : 폴더(파일의 크기) 단위 : byte필요한 프로그램 설치하기코드를 가져오기 위한 git 설치서버를 구동하기 위한 java 설치데이터베이스 역할을 하는 MySQL 설치GitHub에서 코드 가져오기git clone [레포지토리 주소]EC2 Swap 설정Swap 설정 : RAM이 부족할 경우 일부 DISK를 사용하게 해준다.# swqp 메모리 할당 sudo dd if=/dev/zero of=/swapfile bs=128M count=16 # swqp 파일에 대한 권한 업데이트 sudo chmod 600 /swapfile # swap 영역 설정 sudo mkswap /swapfile # swap 파일 사용 설정 sudo swapon /swapfile # swap 성공 확인 sudo swapon -s 빌드하기# gradlew를 사용할 수 있도록 쓰기 권한 설정 chmod +x ./gradlew # gradle을 이용해 테스트를 돌리지 않고 프로젝트 빌드 ./gradlew build -x test서버 실행하기java -jar build/libs/[빌드한 파일명.jar] --spring.profiles.active=dev foreground vs backgroundforeground우리가 보고 있는 프로그램ex) PDF 프로그램이 foreground 프로그램background우리가 보고 있지 않은데 실행 중인 프로그램ex) 컴퓨터에서의 백신 프로그램c2 접속을 종료해도 서버가 종료되지 않도록 하려면 서버를 background로 동작하게 해야 함nohup [명령어] &background 서버 다운ps aux : 현재 실행중인 프로그램 목록을 확인ps aux | grep java : java가 들어가는 프로그램을 확인(각 프로그램의 고유 번호 확인)kill -9 프로그램번호 : 해당 프로그램을 종료 DNS 적용가비아에서 도메인 구매DNS 레코드 수정타입 : A호스트 : www값/위치 : EC2에서 빌린 인스턴스의 퍼블릭 IP 주소 Section - 8 Spring Boot의 이모저모build.gradle빌드 스크립트gradle을 이용해 프로젝트를 빌드하고 의존성을 관리하기 위해 작성plugins : 프로젝트에 적용하고 싶은 플러그인 추가group : 프로젝트의 그룹version : 프로젝트의 버전sourceCompatibility : 프로젝트가 사용하고 있는 JDK 버전repositories : 외부 라이브러리나 프레임워크를 가져오는 장소 설정dependencies : 우리가 사용하는 라이브러리/프레임워크 표시tasks.named('test') : 테스트를 수행할 때 사용할 프레임 워크 Spring Boot의 특징간편한 설정xml 대신 어노테이션 기반의 설정 가능기본적으로 필요한 것을 모두 자동 설정간단한 의존성 관리의존성을 필요한 것끼리 묶어 starter로 관리필요한 라이브러리나 프레임워크 하나 하나 적을 필요 없음강력한 확장성starter 추가만으로 필요한 기술을 도입할 수 있음  application.ymlYAML 문법 사용.yaml 또는 .yml : YAML의 확장자기본적으로 key : value 형식으로 데이터 정의각 계층은 들여쓰기를 통해 구분 (이를 통해 중복 제거)value로 들어갈 수 있는 타입 : 참/거짓, 숫자, 문자열(큰 따옴표 사용)배열은 - 사용#로 주석 표현application.propertiesapplicatoin.yml 대신 사용 가능key : value 형식으로 데이터 기록들여 쓰기를 통해 중복을 제거할 수는 없음application-프로파일 이름.properties 파일을 새로 만들어 profile 설정가독성 떨어짐lombok생성자, getter, setter, equals, toString 등 반복되는 보일러 플레이트 코드(boiler palte code)를 자동으로 생성해줌(반복되는 코드 제거)lombok 도입을 위한 설정lombok 의존성 추가IntelliJ lombok 플러그인 추가intelliJ Annotation Processor 설정과제[과제 #6] API 분리[과제 #7] JPA 적용블로그를 찾아보며 겨우 혼자 배포한 경험이 있었는데 이렇게 다시 배포의 과정을 차근차근 배워볼 수 있어서 좋았다. 완강을 해서 뿌듯했고 앞으로 남은 미니 프로젝트도 잘 마무리할 수 있으면 좋겠다.

백엔드인프런워밍업클럽1기BE

전다윤

[인프런 워밍업 스터디 클럽 1기 BE] 두번째 발자국

Section - 3 역할의 분리와 스프링 컨테이너 스프링 컨테이너의 의미와 사용 방법 스프링 컨테이너와 빈?스프링 컨테이너(클래스 저장소)서버가 시작될 때 스프링 서버 내부에 만들어지는 컨테이너컨테이너 안에는 클래스가 들어가게 된다.스프링 빈스프링 컨테이너 내부의 클래스JDBC 템플릿도 스프링 빈으로 등록 되어 있다.빈을 식별할 수 있는 이름, 타입 등 다양한 정보가 저장되고 인스턴스화된다. 스프링 컨테이너를 왜 사용할까?Service의 코드를 변경하지 않고 Repository를 변경할 수 있다. (BookMemoryRepository -> BookMySqlRepository)의존성 주입(DI, Dependency Injection)컨테이너가 Service를 인스턴스화 할 때 Repository 중 하나를 선택해 넣어주는 과정제어의 역전(IoC, Inversion of Control)컨테이너가 어떤 구현 타입을 쓸지 대신 결정해준다.컨테이너가 Repository 구현체 중 하나를 선택해 Service를 만들어준다.Repositroy 주입어떤 Repository 주입시킬지 스프링 컨테이너에 명시(사용할 곳에 @Primary붙여주기)@Primary : 우선권을 결정하는 어노테이션 스프링 빈 다루기@Configuration클래스에 붙이는 어노테이션@Bean 사용 시 함께 사용한다.@Bean메소드에 붙이는 어노테이션메소드에서 반환되는 객체를 스프링 빈에 등록한다.@Component주어진 클래스를 '컴포넌트'로 간주한다.@RestController, @Service, @Repository, @Configuration 모두 내부적으로@Component를 가지고 있다.해당 어노테이션이 붙은 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다.스프링 빈을 주입 받는 방법생성자 사용(@Autowired 생략 가능)setter 사용필드에 바로 사용@Qualifier 스프링 빈을 사용/등록하는 쪽 모두 사용 가능하다. 빈을 사용하는 쪽에서만 사용하면, 빈의 이름을 적어주어야 한다.양쪽 모두 사용하는 경우 @Qualifier 끼리 연결된다.@Qualifier 가 @Primary 보다 우선순위가 높다Section - 4 생애 최초 JPA 사용하기 Spring Data JPA를 사용한 데이터베이스 조작 SQL 직접 작성의 한계점작성 과정에서 실수가 발생할 수 있고 이를 인지하는 시점이 느리다.컴파일 시점에 발견되지 않고 런타임 시점에서 발견된다.특정 데이터베이스에 종속적이게 된다.반복 작업이 많아진다. 테이블 하나를 만들 때마다 CRUD 쿼리가 항상 필요하다.테이블과 객체는 패러다임이 다르다.해결책JPA (Java Persistence API) JPA자바 진영의 ORM(Object-Relational Mapping) 객체와 관계형 DB 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java 진영의 규칙 HibernateJPA의 구현체 프레임워크JPA는 인터페이스이므로 실질적인 구현 코드가 필요한데 이것이 Hibernate이다.내부적으로 JDBC를 사용  JPA 어노테이션@Entity 스프링이 User객체와 user 테이블을 같은 것으로 바라본다.Entity : 저장되고 관리되어야 하는 데이터@Id이 필드를 primary key로 간주한다.@GeneratedValueprimary key는 자동 생성되는 값MySQL의 auto_increment를 사용 = IDENTITY@Column객체의 필드와 Table의 필드를 매핑한다.null이 들어가 수 있는지 여부, 길이 제한, DB에서의 column 이름 등...생략 가능  Spring Data JPA복잡한 JPA 코드를 스프링에서 쉽게 사용할 수 있도록 도와주는 라이브러리SQL을 작성하지 않아도 쿼리가 나갈 수 있도록 자동으로 처리해준다.   트랜잭션과 영속성 컨텍스트 트랜잭션쪼갤 수 없는 업무의 최소 단위모든 SQL을 성공시키거나 하나라도 실패하면 모두 실패시킨다.@Transactional 어노테이션을 대상 메서드에 붙여 적용한다.commit : 트랜잭션 성공rollback : 트랜잭션 실패IOException과 같은 Checked Exception은 롤백이 일어나지 않는다. 영속성 컨텍스트테이블과 매핑된 Entity 객체를 관리/보관하는 역할트랜잭션 사용하면 영속성 컨텍스트 생겨나고,트랜잭션이 종료되면 영속성 컨텍스트가 종료된다. 영속성 컨텍스트의 특수 능력 4가지변경 감지(Dirty Check)  영속성 컨텍스트 안에서 불러와진 Entity는 명시적으로 save하지 않더라도, 변경을 감지해 자동으로 저장된다.쓰기 지연(Lazy Loading)DB의 INSERT / UPDATE / DELETE SQL을 바로 날리는 것이 아니라, 트랜잭션이 commit될 때 모아서 한 번만 날린다.통신 횟수가 줄어든다.1차 캐싱ID를 기준으로 Entity를 기억한다.이렇게 캐싱된 객체는 완전이 동일하다. 조금 더 복잡한 기능을 API로 구성하기HTTP Body 스펙이 동일할 때, DTO를 새로 만들어야 할까?새로 만드는 것이 좋다두 기능 중 한 기능에 변화가 생겼을 때 side-effect 없이 대처할 수 있기 때문이다.   과제[과제 #4] API 개발MYSQL DB 데이터를 저장하고 데이터를 처리해볼 수 있었다. 그리고 이를 Postman을 이용해 확인해 볼 수 있었다.[과제 #5] 클린 코드지난주에는 스프링과 DB에 대한 기본적인 내용을 학습했다면 이번 주에는 스프링의 핵심 개념에 대해 알 수 있었다. 그래서 이전의 수업들에 비해 수업 내용을 이해하는 데 더 많은 시간이 필요했던 것 같다. 그리고 과제 5와 특강을 통해 클린 코드와 테스트의 중요성에 대해서 다시 한번 느낄 수 느낄 수 있었다. 이번 주에는 여유가 없어서 주어진 강의와 과제만 진행했는데, 다음 주에는 배운 내용에 대해서 추가적인 공부를 할 수 있었으면 좋겠다.

백엔드인프런워밍업클럽1기BE

전다윤

[인프런 워밍업 스터디 클럽 1기 BE] 첫번째 발자국

Section 1 - 생애 최초 API 만들기 Java를 공부하기 전에 알아두면 좋을 것들JAVA의 경우 C언어와는 다르게 운영체제에 따라 각각의 컴파일러가 필요하지 않다. JAVA 컴파일러의 결과물이 각각의 운영체제의 JVM 위로 올라가게 된다.JVM : 바이너리 코드를 읽고 검증하고 실행JRE : JVM + 실행에 필요한 라이브러리 파일JDK : JRE + 개발을 위한 도구(컴파일러, 디버그 도구) JDK > JRE > JVM빌드(build) : 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적 SW(Artifact)로 변환하는 과정실행(run) : 작성한 코드를 컴파일을 거쳐 작동하는 것 (Artifact가 있을 수도 있고 없을 수도 있다)Java 빌드 도구 : 빌드 과정 자동화와 외부 라이브러리 관리를 위해 빌드 툴을 사용 예) ANT, Maven, Gradle  스프링 프로젝트 시작이미 만들어진 스프링 프로젝트를 다운로드spring initializer를 이용해 새로운 프로젝트 시작 https://start.spring.io/ 어노테이션@SpringBootApplication 어노테이션의 경우 스프링을 실행시킬 때 필요한 다양한 설정들을 자동으로 해준다.여기서 과제로 어노테이션에 대한 리서치 과제를 진행하였다.[과제 #1] 어노테이션 네트워크서버 : 어떠한 기능을 제공하는 프로그램을 실행시키고 있는 컴퓨터서버라는 컴퓨터에게 요청을 하기 위해서는 인터넷, 네트워크를 사용한다.  HTTP와 API(웹을 통한)컴퓨터 간 통신은 HTTP라는 표준화된 규약을 통해 이루어진다.HTTP 요청은 HTTP Method(GET, POST)와 Path(/portion)가 핵심이다.요청에서 데이터를 전달하기 위한 방식에는 쿼리와 바디 방식이 있다.HTTP 응답의은 상태코드 가 핵심이다.클라이언트와 서버는 HTTP를 주고받으며 기능하는데 이때 정해진 규칙이 API이다. API 개발하기API Specification(명세) : API를 개발하기 전에 API의 HTTP method, HTTP path, 쿼리와 바디, API의 반환 결과를 결정해야 한다.GET API@RestController : 주어진 Class를 Controller로 등록한다.Controller : API의 입구DTO(Data Transfer Object) 객체 : '쿼리'를 서버 안 Controller로 전달하는 역할POST API쿼리를 사용하지 않고 바디(Body)를 사용한다.Json : 바디에 데이터를 담아주는 방식   Section 2 - 생애 최초 Database 조작하기Database지난 시간에 서버를 종료했다가 시작하면 유저 정보가 전부 사라지는 것을 확인할 수 있었다. API의 결과가 RAM(메모리)에 저장되기 때문에 서버는 Disk(장기기록장치)에 정보를 저장해야 한다. 이럴 때 Database를 사용할 수 있다.Database : 데이터를 구조화 시켜 저장Relational Database : 데이터를 표처럼 구조화 시켜 저장MySQL은 대표적인 RDB이다.데이터베이스를 조작하기 위해서 SQL을 사용해야 한다. MySQL접근 방법Intellij Ultimate에서 MySQL에 바로 접근이 가능하다.CLI로 접근하기 SQLDDL(Data Definition Language) : 데이터를 정의하는 SQLDBcreate database [데이터베이스 이름]; show databases; drop database [데이터베이스 이름]; use [데이터베이스 이름];테이블create table [테이블 이름] ( [필드1 이름] [타입] [부가조건], [필드 2 이름] [타입] [부가조건], ... primary key ([필드 이름]) ); show tables; drop table [테이블 이름];DML(Data Manipulation Language) : 데이터를 조작하기 위한 SQLCRUDCreate(생성) : 데이터 삽입Retrieve or Read(읽기) : 조회Update(업데이트) : 수정Delete(제거) : 삭제# 데이터 넣기 INSERT INTO [테이블 이름] (필드1이름, 필드2이름, ...) VALUES (값1, 값2, ...) # 데이터 조회하기 SELECT * FROM [테이블 이름] WHERE [조건]; # 데이터 업데이트하기 UPDATE [테이블 이름] SET 필드1이름=값1, 필드2이름=값2, ... WHERE [조건]; # 데이터 삭제하기 DELETE FROM [테이블 이름] WHERE [조건]; Spring에서 Database 사용resources 폴더에 application.yml 파일을 생성해 스프링 서버와 연결할 DB 정보를 설정한다. POST API 변경jdbcTemplate을 이용해 SQL을 날릴 수 있다."INSERT INTO user(name, age) VALUES(?, ?)"; 와 같이 값이 들어가야 하는 부분에는 ?를 사용한다.jdbcTemplate.update(sql, request.getName(), request.getAge());jdbcTemplate.update는 INSERT, UPDATE, DELETE 쿼리에 사용 가능하다.첫 파라미터는 sql을 받고, ?를 대신할 값을 차례로 넣어준다.GET API 변경jdbcTemplate.query(sql, RowMapper 구현 익명클래스) : query를 사용하면 SELECT 쿼리를 날릴 수 있다.@Override 함수 : ResultSet 객체에는 결과가 담겨있고, 이 객체에 getType("필드이름") 을 사용해서 실제 값을 가져온다.JAVA 람다를 이용해 더 간결한 코드를 간결하게 변경할 수 있다. [과제 #3] 람다식과 익명 클래스예외 처리사용자가 없으면 IllegalArgumentException과 같은 표준 예외를 throw한다. 사용자의 존재 여부를 확인하고 없으면 예외를 던져 200 OK 대신 500 Internal Server Error가 나오게 한다.여유롭게 강의를 수강하고 과제를 수행할 수 있을 것이라고 생각했는데, 강의도 진도표보다 적게 들었고 두 번째 과제도 수행하지 못했다.😭 다음 주에는 시간이 있을 때 미리 강의도 듣고 과제도 수행해야겠다는 생각이 들었다.

백엔드인프런워밍업클럽1기BE

논빈

[인프런 워밍업 클럽 스터디] 1기 첫번째 발자국

발자국 남기기벌써 일주일이나 지나고 있다니 시간이 진짜 빠르다. 아무래도 신입을 많이 뽑지 않는 지금 시점에서 할 수 있는 건 공부뿐이라고 생각해서 미루고 미루다 자바 공부를 시작하며 스프링 공부를 해야겠다고 맘 먹었다. 근데 또 혼자하면 늘어지는 스타일이라 차라리 같이 공부하고 돈도 내고 해야 열심히 할 것 같아 스터디를 듣게 되었다..!! 근데 생각보다 내 일정이 빡빡해지는 바람에 1주차인 지금은 시간에 쫓기듯 공부하고 있지만 담주부터는 여유롭게 들을 수 있을 것 같다. 그럼 이제 1주간의 회고를 시작해보겠다!! Day0강의를 듣기에 앞서 OT를 온라인으로 진행했다. 앞으로 어떻게 진행되는지의 전반적인 부분을 말씀해주셨다.그리고 자바에 대한 짧은 특강을 해주셨다. 자바는 인터프리터? 컴파일 언어?프로그래밍 언어는 컴퓨터가 이해할 수 있는 언어로 번역해야한다 번역의 종류→ 통짜번역 ⇒ 컴파일러→ 그때그때 번역 ⇒ 인터프리터자바는 하이브리드 언어임(둘 다 가능) .Java → (compile) → .class → JVM컴파일도 하면서 한줄 한줄 읽음 시작부터 유용한 정보를 알려주셔서 넘 좋았다. tmi지만 최근에 정처기 실기를 공부해서 아는 내용이라 공부를 안 하고 있는 건 아니구나 라는 안심을 조금 했다😅 Section0강의를 시작하기 전의 섹션 0 에서는 강의 시작 전 준비와 수업 자료에 대한 내용이었다.대부분의 내용은 이미 알고 있던 거고 다 다운받아져 있던 거라 설명만 조금 들었다.지금 내 노트북은 맥북 m2인데 사실 그냥 homebrew로 다운 받으면 버전이 안 맞거나 잘못 받아서 경로가 이상해지는 현상이 많이 발생한다.이전에 MySQL을 설치하면서 많은 충돌이 있어서 나중에 잊지 않으려고 블로그와 노션에 열심히 정리해두었다.https://velog.io/@dmsqls19/ERROR-mac에서-MySQL-완전-삭제-후-재설치-오류Homebrew-사용했을-경우나중에 같은 오류가 있다면 이 글을 보고 있는 분도 잘 해결했으면 좋겠다! Section1섹션 1부터는 본격적인 강의 시작이다.자바를 공부하기 전에 알아두면 좋은 강의 2개를 올려주셨는데 정말 유익한 내용이다.첫번째 강의에서는 Java라는 언어를 컴퓨터가 알게 되기까지의 과정이 나오는데 컴파일을 통해 사람의 언어를 컴퓨터가 인식하게 된다고 한다. 자바는 다른 언어와 다르게 컴파일러 하나로 모든 운영체제에 사용할 수 있다.JDK > JRE > JVM 라서 JDK를 설치하면 JRE와 JVM도 함께 설치된다.JDK의 버전과 종류는 다양한데 LTS라는 안정화된 버전을 사용하는 것이 좋다.두번째 강의에서는 빌드와 실행에 대해 배우는데 빌드란 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 SW 가공물로 변환시키는 과정이다. 테스트 코드도 빌드 과정의 일부인데 테스트 코드를 작성해서 개발 속도 및 안정성의 품질을 높여주는 것이 좋다. 그 다음 오픈 소스와 우리가 만든 코드를 합치는 과정을 패키징이라 하는데 패키징을 하면 빌드 과정의 끝이다. 실행(Run)을 해서 내가 작성한 코드를 작동시킬 수 있는데 Artifact가 나올 수도 있고 나오지 않을 수도 있다는 점에서 빌드와 차이점이 있다. 빌드는 수동으로 하게 되면 실수가 많이 나올 수 있으므로 빌드 툴을 이용하는 것이 좋은데 요즘 가장 많이 쓰이는 빌드 툴은 maven과 gradle이다.이제 본격적으로 강의를 시작하는데 처음에는 스프링 프로젝트를 시작하는 방법에 대해 배운다. 그 다음 @SpringBootApplication 에 대해 배우면서 어노테이션이 무엇이고 서버란 무엇인지에 대해 배운다.첫번째 과제가 바로 어노테이션에 관한 과제였다. 스스로 찾아보면서 공부를 하니 이해가 더 잘 되는 것 같기도 하면서 아리송하기도 하다. 📄과제1. 어노테이션 그 후 네트워크와 HTTP, API에 대한 것을 배우는데 백엔드를 공부하는 사람에게 필요한 내용을 배워서 좋은 강의라고 느끼는 부분이았다.api에 대해 배운 후 get과 post를 직접 해보는데 처음에는 더하기, 곱하기를 해보며 postman도 써보고 코드도 직접 작성해봤다. 그 다음에 유저 정보 조회를 하는 get api와 유저 정보를 저장하는 post api에 대해 배웠다. 미리 get과 post를 해보고 하니 더욱 쉽게 느껴졌다. 두번째 과제는 get api와 post api를 직접 연습하는 과제였는데 자바에 좀 덜 익숙해서 그런지 좀 어려운 과제였다. 그래도 두 번 보니 처음 과제를 마주했을 때보단 쉬웠다.📄과제2. GET API, POST API Section2섹션2에서는 서버와 데이터베이스를 연결하는 과정이다. 데이터베이스는 MySQL을 사용했다. 데이터베이스가 서버에 필요한 이유는 메모리에서만 유지되는 유저 정보를 서버단에 올리기 위해서 필요하다. 강사님이 서버에 올리는 두 가지 방법을 알려주셨는데 하나는 인텔리제이 유료 버전으로 인텔리제이에서 하는 방법과 터미널에서 MySQL을 사용하는 방법이었다. 나는 인텔리제이에서 하는게 더 편한 것 같아 첫번째 방법을 사용했다.데이터베이스에 대해 공부하고 sql 문법에 대해 배운다. 나는 최근에 정처기 시험 때문에 이미 너무 많이 봐서 어렵게 느껴지진 않았다. 그 후 스프링과 데이터베이스를 연결하는 과정을 배우는데 코드 따라치는 건 어렵지 않은데 자바가 익숙한 건 아니라서 이해를 하는데 조금 오래 걸렸다. 그래도 오래 보다보면 또 이해가 되기 때문에 조금 더 많은 시간을 들여 공부를 해야겠다고 생각했다.연결 후에는 유저 업데이트와 삭제를 해보면서 정말 db에 유저 정보가 들어가는지 확인했다. 그 다음 유저 정보가 없을 경우에 업데이트, 삭제가 되는 예외처리를 해주었다.그리고 과제로는 sql을 연결해보며 나온 람다식에 대해 조사하는 과제였다. 찾아보면서 이해 못한 부분을 조금 더 이해하게 되었다.📄과제3. 익명 클래스와 암다식 5일차에는 중간점검이 한 번 있었는데 질문하는 것을 답변해주는 시간이었다.나도 신입 개발자로서 궁금했던 점들을 다른 분들이 많이 질문해주셔서 답변을 들으며 엄청 유익해서 뭔가 이런 시간이 조금 더 많으면 좋겠다는 생각이 들었다.이번주는 시간이 조금 빠듯해서 진도표보다 조금 덜 공부했다. 다음주는 시간이 많아서 아마 더 할 수 있을 것 같다. 한 주 동안 공부해보면서 아직 자바 공부가 많이 부족하다는 걸 깨달았다. 그래서 다음주는 자바 공부를 하면서 강의를 들을 예정이다. 공부하면서 회고도 하고 과제도 하니 진짜 같이 공부하는 기분이 들어 더 열심히 해야겠다고 다짐했다!! 📚공부했던 내용 정리 노션 https://quartz-mastodon-ac1.notion.site/6ae20b419ca9400c94b4df9ab8f2f3da?pvs=4 

백엔드인프런워밍업클럽1기BE

채널톡 아이콘