블로그
전체 3#카테고리
- 웹 개발
#태그
- 인프런워밍업클럽0기
- 발자국
- 인프런워밍업스터디클럽0기
- 스프링
- 인프런워밍업스터디클럽
![[인프런 워밍업 스터디 클럽 0기] 세 번째 발자국](https://cdn.inflearn.com/public/files/blogs/e0f6c402-ee49-418c-adc4-e65412566ed3/인프런 스터디 썸네일.png?w=260)
2024. 03. 13.
0
[인프런 워밍업 스터디 클럽 0기] 세 번째 발자국
강의 출처https://inf.run/XKQg 3주차(Day11 ~ Day14) 학습 내용 요약 서버 개발에 대한 기본적인 이해를 바탕으로 실제 환경에서의 배포와 관리에 초점을 맞추었습니다.EC2에 접속하여 리눅스 명령어를 사용하여 서버를 다루는 경험을 했고, 실제로 애플리케이션을 배포하는 과정을 체험하면서 배포 프로세스에 대한 이해를 높일 수 있었습니다.또한, build.gradle 파일 및 Spring과 Spring Boot의 개념을 다루면서 프로젝트의 기본 설정에 대해 자세하게 알 수 있었습니다.마지막으로, 코치님이 제시한 로드맵을 통해 어떤 기술 스택을 학습하고 어떤 경험을 쌓아야 할지에 대한 방향을 설정하는 데 도움이 되었습니다. 3주차 미션: 미니 프로젝트 프로젝트 설정부터 시작하여 과제에 명시된 기능 요구사항을 코드로 작성하는 미션이었습니다. 혼자서 코드를 작성하면서 고민하고 다양한 방법을 시도해보는 과정에서 학습에 많은 도움이 되었습니다.또한, 코드 리뷰를 통해 코치님의 꿀팁을 받을 수 있었고, 다른 참가자들의 DB 설계 및 코드 작성 방법을 살펴보면서 다양한 접근 방식을 이해하고 새로운 아이디어를 얻을 수 있었습니다. 이를 통해 코드를 작성하는 다양한 방법을 탐구하고, 다른 접근법을 통해 어떻게 구현할 수 있는지를 확인할 수 있던 유익한 경험이었습니다.미니 프로젝트를 통해 실제 프로젝트를 경험하고, 코드를 작성하고 개선하는 과정에서 많은 것을 배우고 성장할 수 있었습니다.
웹 개발
・
인프런워밍업클럽0기
・
발자국
![[인프런 워밍업 스터디 클럽 0기] 두 번째 발자국](https://cdn.inflearn.com/public/files/blogs/b8d567f7-6e2d-4b01-b8d6-1748c97f0556/인프런 스터디 썸네일.png?w=260)
2024. 03. 02.
0
[인프런 워밍업 스터디 클럽 0기] 두 번째 발자국
강의 출처https://inf.run/XKQg 2주차 학습 내용 요약 Day 6: 스프링 컨테이너의 의미와 사용 방법스프링 컨테이너를 통해 애플리케이션의 객체 라이프사이클과 설정을 관리하며, 개발자가 직접 객체를 생성하지 않고 의존성 주입을 요청할 수 있어 코드 간의 결합도를 낮추고 유지보수성을 향상할 수 있습니다.또한, @Primary와 @Qualifier 어노테이션을 사용하면, 같은 타입의 빈이 여러 개 있을 경우 어떤 빈을 주입받을 것인지를 선택할 수 있습니다. Day 7: Spring Data JPA를 사용한 데이터베이스 조작Spring Data JPA는 개발자가 JPA를 더 쉽고 편리하게 사용할 수 있도록 도와주는 도구입니다.JPA는 Java Persistence API의 약자로, 자바 ORM 기술에 대한 API 표준 명세입니다. ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말합니다.SQL을 직접 사용하는 경우, 개발자가 직접 문자열을 작성하기 때문에 실수를 할 수 있고, 실수를 인지하는 시점이 늦어져 서버를 실행할 때 오류를 발견하게 됩니다.또한, SQL은 DB에 종속적이므로, MySQL이 아닌 다른 DB를 사용한다면 모든 SQL문을 수정해야 합니다. 이러한 문제를 해결하기 위해 JPA가 탄생하게 되었습니다.JPA는 API이기 때문에 말 그대로 규칙일 뿐이며, 이 규칙에 따라 코드를 작성해야 합니다.이를 돕기 위해 Hibernate와 같은 JPA 구현체를 사용합니다.Hibernate는 JPA의 표준을 준수하면서, 데이터베이스와의 작업을 단순화하고 자동화해주는 역할을 합니다.Spring Data JPA는 이를 한 단계 더 추상화하여, 개발자가 JPA를 더 쉽고 편리하게 사용할 수 있게 도와주는 도구입니다.이를 통해, 데이터베이스의 Create, Read, Update, Delete(CRUD) 연산을 Repository 인터페이스에 정의된 메소드로 간단히 수행할 수 있습니다.또한, 메소드 이름만으로도 쿼리를 생성하고 실행하는 기능을 제공합니다. Day 8: 트랜잭션과 영속성 컨텍스트트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한 번에 수행되어야 할 일련의 연산들을 의미합니다.트랜잭션은 데이터의 일관성을 보장하며, 작업이 완전히 수행되거나(Commit), 아니면 전혀 수행되지 않아야(Rollback) 함을 보장하는 '원자성'을 가집니다.영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 의미합니다.JPA에서는 엔티티 매니저를 통해 엔티티를 영속화하며, 이 때 엔티티 매니저는 영속성 컨텍스트에서 엔티티를 관리합니다.트랜잭션과 영속성 컨텍스트는 밀접한 관계를 가지고 있습니다.영속성 컨텍스트는 트랜잭션을 시작할 때 생성되며, 트랜잭션이 끝날 때까지 엔티티를 관리합니다.트랜잭션이 커밋되면, 영속성 컨텍스트에 저장된(영속화된) 엔티티들이 데이터베이스에 반영됩니다.만약 중간에 오류가 발생하면 트랜잭션이 롤백되면서 데이터베이스에는 아무런 변화가 없게 됩니다. Day 9: 조금 더 복잡한 기능을 API로 구성하기스프링빈, Spring Data JPA, 트랜잭션 등의 개념을 활용하여 도서관 API를 개발하는 과정에 대해 배웠습니다. Day 10: 객체지향과 JPA 연관관계객체지향 프로그래밍에서는 객체 간의 관계를 표현하기 위해 연관관계를 사용합니다.이는 객체가 다른 객체를 참조하는 것을 의미하며, 이를 통해 객체 간의 상호작용을 표현할 수 있습니다.JPA에서는 이러한 객체지향적 연관관계를 데이터베이스의 테이블 관계에 매핑하는 방법을 제공합니다.@ManyToOne, @OneToMany, @OneToOne, @ManyToMany 등의 어노테이션을 사용하여 엔티티 간의 연관관계를 설정할 수 있습니다. 2주차 미션 이번 2주차 미션을 통해, JPA를 활용하여 개발 과정을 보다 효율적으로 진행할 수 있음을 배웠습니다.Repository를 인터페이스로 구현하는 방식을 적용해봄으로써 다양한 구현 클래스를 활용한 유연한 설계 방법을 배울 수 있었습니다.@Primary와 @Qualifier 어노테이션을 활용하여 두 개의 Repository가 바뀌어 동작하는 과정을 관찰하며, 이를 통해 코드의 확장성과 유연성을 높일 수 있었습니다.Spring Data JPA를 활용하여 기존 코드를 리팩토링하는 작업을 수행하였습니다.여기서 Entity와 JpaRepository를 이용하니 데이터베이스 연산을 보다 간편하게 처리할 수 있었고, 이를 통해 코드의 효율성과 가독성이 크게 향상되는 것을 체감할 수 있었습니다.특히, 인터페이스 내에서 메소드 시그니처만을 작성하면 스프링이 알아서 해당 인터페이스에 대한 구현체를 생성해주는 점이 매우 인상적이었습니다.이를 통해 JPA를 활용하면 얼마나 코드를 효율적이고 깔끔하게 작성할 수 있는지를 실감할 수 있었습니다.
웹 개발
・
인프런워밍업스터디클럽0기
・
발자국
・
스프링
![[인프런 워밍업 스터디 클럽 0기] 첫 번째 발자국](https://cdn.inflearn.com/public/files/blogs/ea88baba-1a54-4fbd-8a8e-4b3a8ebe68c2/인프런 스터디 썸네일.png?w=260)
2024. 02. 24.
1
[인프런 워밍업 스터디 클럽 0기] 첫 번째 발자국
강의 출처https://inf.run/XKQg 1주차 학습 내용 요약 Day 1: 개발 환경 설정 및 네트워크 기초스프링 프로젝트를 만들고, 웹에서 데이터를 주고 받는 방법에 대해 이해했습니다.API를 만들기 전에 API 설계를 어떻게 하는지 배우고, 그것을 기반으로 스프링의 어노테이션을 사용하여 실제 API를 개발했습니다. Day 2: 첫 HTTP API 개발클라이언트로부터 JSON 형식의 데이터를 받아와서 처리하는지에 대한 기본 코드를 작성하면서, 실제 도서 관리 애플리케이션을 만들어보았습니다. Day 3: 기본적인 데이터베이스 사용법디스크와 메모리의 차이를 이해하고, 간단한 엑셀로 비유를 통해 MySQL이라는 데이터베이스를 어떻게 다루는지 학습했고, MySQL을 사용하여 데이터베이스를 조작하는 기초적인 CRUD 작업을 익혔습니다.또한, 스프링 서버에서 실제로 데이터베이스에 접근하도록 설정 파일을 작성하고 Jdbctemplate을 이용한 데이터베이스 연동을 학습했습니다. Day 4: 데이터베이스를 사용해 만드는 API요청 값의 검증과 예외 처리에 대한 로직을 작성하여 안정적으로 업데이트와 삭제 API를 개발했고, 스프링 서버가 데이터를 저장, 조회, 업데이트, 삭제할 수 있는 모든 기능을 구현했습니다. Day 5: 클린 코드의 개념과 첫 리팩토링클린 코드의 중요성과 코드를 깔끔하게 유지하기 위해 Layered Architecture를 도입하여 Controller, Service, Repository로 3단 분리하여 코드를 리팩토링하는 방법에 대해 배웠습니다.이를 통해 코드의 가독성과 유지보수성을 향상시키는 방법을 알게 되었습니다. 1주차 미션 Day1 어노테이션을 사용하는 이유(효과)는 무엇일까?나만의 어노테이션은 어떻게 만들 수 있을까? 어노테이션에 대해 학습하여 해당 질문에 대한 답변을 스스로 작성해볼 수 있는 미션이었습니다.평소에 스프링에서 어노테이션을 사용할 때 그냥 사용하면 되는구나 정도로만 알고 있었는데, 어노테이션의 기본 문법부터 커스텀 어노테이션까지 학습하면서 어노테이션의 역할과 장점을 이해할 수 있었습니다.보일러 플레이트 코드를 줄여주는 이점과 애플리케이션의 고유한 요구사항에 맞게 커스텀한 어노테이션의 사용이 개발 생산성에 도움을 줄 수 있다는 점도 알게 되었습니다.이제는 개념들을 단순히 사용하는 것이 아니라, 그 뒤에 숨은 이유와 장점을 고려하여 개발에 적용할 수 있게 되었습니다. 블로그https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%B2%AB-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C Day2 GET API와 POST API 개발하기 문제에 제시된 API Spec을 보고 API를 개발하는 미션이었습니다.먼저, GET API를 개발할 때 쿼리 파라미터의 처리 방법에 대해 고민하였습니다.쿼리 파라미터의 개수가 한 개인 경우에는 변수에 바로 바인딩하는 방식을 선택하였고, 여러 개의 쿼리 파라미터가 필요한 경우에는 Dto 클래스를 활용하여 요청을 매핑하는 방식을 선택했습니다.POST API를 개발할 때에는 Request Body로 전송되는 JSON 데이터를 받아오기 위해 Request Dto를 만들고, 이를 통해 데이터를 매핑하는 코드를 작성했습니다.이때, Java 14에서 추가된 record를 활용하여 Dto를 불변 객체로 만들어 코드의 안정성을 높였습니다.또한, Java 8 이후로 도입된 LocalDate 클래스를 사용하여 Date 클래스와의 차이점과 날짜 데이터를 처리하는 방법을 익힐 수 있었습니다. 블로그https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%91%90-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C Day3 자바의 람다식은 왜 등장했을까?람다식과 익명 클래스는 어떤 관계가 있을까? - 람다식의 문법은 어떻게 될까? 람다식이 등장한 이유와 익명 클래스와의 관계에 대해 알아보면서 해당 질문에 대한 답변을 생각할 수 있는 미션이었습니다.기존에는 익명 클래스를 사용하여 함수형 인터페이스를 구현하는데 많은 코드를 필요로 했으며, 이는 작은 작업을 수행하는 경우에도 코드의 양이 불필요하게 많아지는 문제를 야기했습니다.하지만, 람다식의 등장으로 이러한 불편함을 해소하고, 간단한 표현으로 함수형 인터페이스를 구현할 수 있게 되었습니다.람다식이 어떻게 코드를 간결하게 만들어주는지를 실제 코드를 통해 경험하면서 개념을 익힐 수 있었습니다. 블로그https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%84%B8-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C Day4 데이터베이스를 사용해 API 개발하기 JdbcTemplate을 활용하여 데이터베이스와 상호 작용하는 방법에 대해 깊게 학습했습니다.필요한 테이블을 생성하고 JdbcTemplate을 사용하여 SQL 쿼리를 실행하여 데이터를 다루는 방법을 익혔습니다. 예제를 따라가면서 HTTP 요청에 따라 데이터베이스에 새로운 데이터를 추가하거나 업데이트하는 코드를 작성하면서 JdbcTemplate의 실제 활용도를 체감할 수 있었습니다.테이블에 is_sold 칼럼을 추가하여 데이터의 판매 여부를 명시함으로써 데이터베이스의 일관성과 코드의 가독성을 향상할 수 있었습니다.그리고 문제 3에서 SUM이나 GROUP BY 등의 집계 함수에 대한 정확한 이해가 필요하다고 느껴, 틈틈히 SQL 공부를 병행해야 겠다는 생각이 들었습니다. 블로그https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%84%A4-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C Day5 클린 코드 개념을 적용하여 코드 리팩토링하기 클린 코드 작성하는 방법에 대해 찾아보고 과제에 제시된 코드를 리팩토링하는 미션이었습니다.코드를 입력, 실행, 출력 단계로 명확히 분리하여 가독성을 향상하여 Main 클래스에서 코드의 흐름을 쉽게 이해할 수 있도록 설계했습니다.코드를 읽는 개발자가 다른 개발자의 의도를 이해하는 데 도움이 될 수 있도록 메소드명과 변수명을 코드의 목적과 기능을 명확히 드러낼 수 있도록 작성했습니다.코드를 작게 만들어 가독성을 높이고, 재사용성을 증가시키기 위해 클래스와 메소드는 하나의 책임만을 갖도록 설계했습니다.상수를 활용하여 반복되는 문자열을 상수로 정의하여 코드의 일관성을 유지하고 오타를 방지했습니다.주사위를 나타내는 클래스에서 OOP 개념을 도입하여 유연성을 높이고, 나중에 주사위 범위를 변경해도 코드의 수정이 용이하도록 구조화했습니다.이번 미션을 통해 클린 코드 작성의 중요성과 가독성의 영향력을 체감할 수 있었습니다.코드를 작성하는 것뿐만 아니라, 코드를 읽는 것이 개발에 있어서 중요한 부분임을 깨닫게 되었습니다. 블로그https://velog.io/@awesomehill/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%9B%8C%EB%B0%8D%EC%97%85-%ED%81%B4%EB%9F%BD-0%EA%B8%B0-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%8B%A4%EC%84%AF-%EB%B2%88%EC%A7%B8-%EA%B3%BC%EC%A0%9C 1주차 회고 프로젝트를 진행하면서 스프링 JPA에 대한 학습을 병행했는데, 조금은 힘든 도전이었지만, 그만큼 성취감과 만족도도 크게 느낄 수 있었습니다.또한, 인프런 스터디를 통해 다양한 주제에 대한 학습과 토론을 할 수 있어 지식의 폭을 넓히는 데에 도움이 되었습니다.여러 일을 병행하면서 힘들기도 했지만, 이러한 경험이 성장의 발판이 될 것이라고 생각합니다.앞으로도 끝까지 완주할 수 있도록 노력하겠습니다:)
웹 개발
・
인프런워밍업스터디클럽
・
발자국




