우리 fisa 2기 '클라우드 서비스 개발' 10주차
by 개발하는지호어느덧 내가 여기 온지 70일이라는 시간이 지났다. 거의 절반이나 온 셈이다 ㅋㅋ
이 과정을 한 번 더 겪으면 거진 마무리 된다는게 믿기지가 않는다 !!!
내가 정말 잘하고 있을까 나의 현 위치는 앞으로 미래는 어떻게 그려 나갈까?? 라는 생각을 하며 하루를 보내고 있다.
이러한 생각을 하면서 나의 저번 한 주를 읊어 본다!
일상 얘기
여전히 하고 있는 아침 운동 ㅋㅋㅋ 끝나면 대략 새벽 6시 쯤이다... 오후 6시 아니다!
오전이다 오전!! 나름 체력 관리에 신경을 많이 쓰고 있기 때문에 현재 지쳐갈 수도 있는 시점에서 지치지 않고 계속 달릴 수 있다고 생각한다 ㅎㅎ (쉅 시간에 잘 안 피곤함 ㅋㅋ)
그런데 ~~~ 이번 한 주는 그런 한 주 였을까?? 나에게 지각이라는 단어가 찾아왔다.. 그것도 두 번이나..
나는 항상 출발하는 시간에 출근을 하지만... 이상하게 버스가 느린 거북이처럼 갈 때가 있다 ㅠㅠ
한 번은 눈이 와서 블랙아이스 때문일까?? 두 번은 오다가 다른 차의 교통사고 발생 ㅠㅠ 으로 교통혼란..
그렇게 ㅋㅋ 난 두 번의 지각을 하게 되었따아 ,, 의도치 않은 지각이라 조큼 억울하긴 한데.. 먼데서 오는 거라
그럴 운명은 피할 수 없긴 하나보다 ㅋㅋ
하지만! 어떤 일이든 지각은 허용되지 않겠다는 생각을 가지고 있기 때문에 최대한 안 하기 위해 노력할 것이다 !!
드디어 ~ 정처기 시즌이 왔다 !! 나는 정처기 공부를 꾸준히 해 왔는데, 접수날이 와서 접수를 했다.
나는 기사를 처음 응시해보는데 ㅋㅋ 광클의 영역인 것을 처음 알았다 ㅋㅋㅋ 자칫하면 자기 동네가 아닌
타지역에서 볼 수도 있다고 하더라고ㅠㅠ ex) 서울 사람 -> 강원도, 부산 사람 -> 진주 등등
그래도 미리 알려주는 동기가 있었고, 우리 반에 생각보다 많은 인원이 정처기 시험을 치뤄야 했기에 서로 도와주며
원하는 날짜 장소에 무사히 안착할 수 있었다 ㅋㅋ (우리반 쵝오!)
각설하고 이번 정처기 꼭 마무리 잘해서 필기 따고 실기까지 딸 예정이다!!
혹시 맥북 유저들 !!! 이거 잊지 말아요오 !~ ㅋㅋㅋ CPU 사용량 표시해주는 프로그램인데
많이 사용할 수록 저 고양이가 빨리 달립니다 ㅋㅋ so cute ~~ 심지어 고양이 뿐만 아니라 원하는 케릭터들이 있는데 선택하시면 됩니다!!
'running cat' 이라고 치면 바로 나옵니당
다들 오토 오토 김밥 하길래 뭔가 해서 한 번 가봤다 ㅋㅋ 맛도 괜찮고 양도 좋아서 가성비로는 갑이었다 👍👍
개인적으로 김밥을 엄청 좋아하기 때문에 자주 애용할 것 같다 ㅎㅎ
공부 얘기
1. 이번 주 배운 것
이 번주는 크게 두 가지로 나눌 수 있다. Data Accessing , JavaEE
Data Accessing
Data Accessing 에는 JDBC, Connection Pooling, DataSource Interface 그리고 JPA 방식이 있다.
1. JDBC(Java DataBase Connectivity) : 자바에서 DB와 연결해주기 위해 JDBC API를 제공해주는데 이때 Driver Manager 클래스를 활용해서 DB와의 연결을 한다. 그리고 Statement와 ResultSet을 활용해서 DB 데이터를 활용한다.
- java.sql 패키지가 가지고 있는 class 라이브러리 import (ex. Connection, Statement, ResultSet)
- DB와의 Connection 열기 -> DriverManger.getConnection() 를 활용하여 Connection 객체 생성 (실제 DB와의 물리적 연결 수행)
- 쿼리 실행(Excute a Query) -> SQL문을 DB에 전송하는 Statement 객체 활용(or PrepareStatement)
- 결과 데이터 추출 -> ResultSet.getXXX() 를 활용하여 결과 셋(ResultSet)으로부터 데이터 추출
- DB 커넥션 close(Clean up the environment) -> conn.close(), stmt.close() 등
2. Connection Pooling : 프로그램 시작 과정에서 커넥션 객체를 2개 이상 미리 생성해둔 후에 사용자 요청이 올 경우 생성해둔 객체를 바로 활용하여 요청 처리 시간을 감소시키는 방식이다.
커넥션 풀링의 이점
- 커넥션 생성 시간 감소
- 간소화된 프로그래밍 모델
- 애플리케이션의 리소스 관리 최적화
3. DataSource Interface : 원래는 Connection Pooling을 하기위해 매번 커넥션 객체를 생성해야 했었다. 하지만, DataSource Interface를 통해 Hikari, Apache DBCP 구현체를 활용해서 connection pooling을 효율적으로 관리한다.
*DataSource Interface를 활용함으로써 코드내 수정을 최소화 시켜 결합도를 낮추는 효과가 있다.
4. JPA(Java Persistence API ): JPA란 Java Persistence API의 줄임말로, 자바 진영에서 ORM(Object Relational Mapping) 기술의 표준으로 자리잡은 인터페이스의 집합을 의미한다. JPA의 구현체로 대표적인 것은 Hibernate 가 있다.
-> JPA를 사용할 경우, JDBC에 비해 DB적ㅂ근을 위해 작성해야 할 코드의 볼륨이 줄어들면서 코드들이 보다 추상화 된다.
또한, Hibernate는 JPA 인터페이스를 구현한 구현체의 하나일 뿐이지, Hibernate가 JPA의 전부를 의미하진 않는다. 빈도가 높을 뿐!
*ORM(Object Relational Mapping) : 단순하게 Java 객체를 의미하는 Object, 데이터베이스 테이블을 의미하는 Relation 이 두 개념을 서로 연결(Mapping)하여 마치 하나인 것처럼 관리하기 위한 방법론이다. (별도의 SQL문 작성 없이 Java 코드만으로 DB 데이터를 저장 가능하다.)
이로써 영속성 컨텍스트 활용
<<영속성 컨텍스트>>
영속성 컨텍스트 생성
EntityManager가 생성되면 영속성 컨텍스트가 생성된다.
매니저와 컨텍스트는 1:1 매칭
각 매니저는 개별 영속성 컨텍스트를 가지고 있다.
EntityManager manager = factory.createEntityManager();
이걸로 인해 영속성 컨텍스트가 생성이 된다. 이후, 상황에 따라
Book book = manager.find(Book.class, 0) //조회
=================
Book book = new Book("어린왕자", "생텍쥐페리")
manager.persist(book); // 영속성 컨텍스트에 엔티티를 보관(영속화)
=================
// id가 1번인 Book 엔티티를 조회 후 책 이름을 변경
Book book = manager.find(Book.class, 1); // id가 1번인 데이터 조회
// DB에서 조회된 엔티티(book)의 필드 값을 변경하면 UPDATE 쿼리가 작성됨
book.setName("김영한의 JPA");
=================
Book book = manager.find(Book.class, 1);
// id가 1번인 Book 엔티티를 제거
// EntityManager가 제공하는 메서드
manager.remove(book);
*persist() : 영속성 컨텍스트에 엔티티를 보관(영속화)
를 하고
transaction.commit();
을 수행해서 DB에 반영한다.
*단, 조회 Select 같은 경우는 transaction이 필요가 없다!
전체적인 구조를 보면 이렇게 될 수가 있다.
JavaEE
Java SE 기반으로 웹 기술을 활용, 구현 가능한 플랫폼을 말한다.
여기서 여러가지를 배울 수 있었는데 크게 7가지로 나뉜다.
- Web Server와 Web Application Server 의 차이점
- Servlet
- Character Encoding - 문자처리
- Statement Management - 상태 정보 유지
- Forward & Redirect - 페이지 이동
- JSP
- MVN 패턴
이를 활용한 여러 기술들은 이미 블로그에 잘 정리 해뒀기 때문에 이 블로그를 참고하면 된당
https://jiholine10.tistory.com/293
Web Server, Web Application Server
1. Web Server, 웹 서버 정적 리소스(HTML, CSS, JS, 이미지, 영상 등)을 제공하는 서버를 의미한다. 2. Web Application Server, WAS, 웹 애플리케이션 서버 웹 어플리케이션 서버는 흔히 WAS, 와스, 컨테이너, 웹
jiholine10.tistory.com
https://jiholine10.tistory.com/294
Sevlet
1. Servlet 개요 Servlet은 주로 웹 애플리케이션 서버에서 동작하는 프로그램 구현 시 사용한다. 동시 접속자가 늘어나면 효율이 떨어지는 CGI기술의 대안으로 등장했다. 서블릿은 클라이언트의 요
jiholine10.tistory.com
https://jiholine10.tistory.com/295
Character Encoding - 문자 처리
1. 한글 깨짐 서버에서 클라이언트로의 응답 메시지 전송 과정에서 기본적으로 포함해야 할 내용이다. 보내는 데이터 타입 = text/html 인지, json 인지 등 인코딩 할 문자셋(Charset) 정보 = UTF-8인지, cp
jiholine10.tistory.com
https://jiholine10.tistory.com/296
Statement Management - 상태 정보 유지
Http 프로토콜의 특성 중 하나는 무상태(Stateless)로 동작한다는 것 따라서 이전에 연결된 시점의 상태 정보를 서버가 유지해주지 않는다! 그렇기 때문에 상태 정보를 일정 시간 동안 유지시키기
jiholine10.tistory.com
https://jiholine10.tistory.com/297
Foward & Redirect - 페이지 이동
1. 경로 이동 방법 사용자의 요청에 따라 일련의 처리가 수행 중인 서블릿에서 다른 서블릿으로 이동하여 다른 처리도 수행해야 할 경우, 이동하는 방법은 크게 2가지 이다. 1-1 Forward 클라이언트
jiholine10.tistory.com
https://jiholine10.tistory.com/298
JSP - Java Server Page
JSP, Java Server Page JSP는 간단하게 Java code in HTML을 의미한다. 서블릿 기반 HTML 페이지 구현에서 봤듯이, Java 코드에 HTML을 문자열 형태로 작성하기엔 무리가 있다. 따라서, HTML 문서에 Java 코드를 작
jiholine10.tistory.com
https://jiholine10.tistory.com/299
MVC Pattern
1. Model - View - Controller Model 개발하고자 하는 프로그램에서 요구되는 관심사이자 데이터를 추상화, 모델링하여 표현된 결과 클래스 View Model을 UI Presentation 에 표시하는 역할을 담당하는 클래스 Con
jiholine10.tistory.com
2. 이번 주에 겪은 시행착오와 극복
이 번주에 겪은 시행착오라 한다면 멘탈 관리이다. 사람이 살다보면 자기가 하고 있는 것에 의문을 품을 때가 있고 거기에서 오는 불안감을 느끼기 마련이다. 이럴 때 가장 필요한 것은 나에 대한 믿음이다. 그리고 내 할 일을 묵묵히 하는 것이다. 그러하지 못하고 불안함 속에 갇힌다면 아무것도 이룰 수 없기 때문이다. 비록, 내가 열심히해서 가진 것이 작더라도 그 작은 것이라도 얻기 위해서는 최선을 다해야하는 것이다.
멘탈 꽉 부여잡고 명상과 성찰을 통해 나를 더 강하게 일으켜 세우자 !
화이팅!
3. 앞으로 어디에 적용
Database Accessing 방식을 공부하면서 JDBC API 부터 Data Source Interface의 구현체 Hikari 그리고 JPA 까지 접했다. 이는 역사적인 흐름을 알 수 있을 뿐만이 아니라, 향후 어떤 회사를 가더라도 레거시 한 코드가 있을 수도 있는데, 거기에 흔들리지 않고 버틸 수 있는 잣대가 되었을 것이라 확신한다. 그리고 상황에 맞게 기술을 적용함으로써 일의 효율성도 증대될 것이다.
Java EE의 여러 기술인 Servlet, JSP, 등을 배우고 이를 통해 생긴 MVC를 배웠다. 이 역시 Spring에 들어가면 사용 빈도는 줄어들 것이지만, 향후 어떠한 회사를 가더라도 코드 해석에 있어서 큰 도움이 될 것임은 분명하다. 또한 Spring을 이해하는데에도 크게 도움이 될 것으로 보인다.
이렇게 당장 쉬운것, 트랜드한 것만 하는 것이 아니고, 과거에 썼던 것을 같이 공부함으로써 기술이 어떻게 이용이 되는지에 대해 정확히 알 수 있었던 시간이었다. 코드 해석 영역 또한 개발자로서 중요한 부분인데, 이를 통해 해석 능력이 한층 상승한 것 같다!
4. 현재까지의 학습 평가 및 다음 학습을 위한 다짐/목표
-수업-
이제껏 프론트 백엔드를 해오면서 많은 고충이 있었다. 이제 마지막 관문 Spring이 남았고, 그 뒤에 부가적으로 강의가 남았는데 마지막까지 최선을 다해서 무사히 내것으로 만들 수 있었으면 좋겠다 !!
-코테-
코딩테스트 공부도 꾸준히 하고 있는데, 이제 어려운 부분인 DFS BFS 영역에 진입했다. ㅋㅋ 더욱 열심히 하고 차근차근 공부해 나가야 겠다!
-정처기-
정처기 지원을 했고 2월 17일랄 시험을 보게 되는데 차질 없이 공부를 진행하도록 해야겠다.
-프론트 엔드 복습-
현재 이것저것 하다보니 진도를 많이 못 빼고 있다. 현재 우선순위에서는 최상위가 아니기 때문에 너무 무리는 하지말되 최선을 다해서 틈틈히 공부를 이어나가야겠다.
다음 한 주도 화이팅 😁😁☀️
'나의 다짐,기록,일상 > 우리FISA2기_성장기록' 카테고리의 다른 글
우리 fisa 2기 '클라우드 서비스 개발' 12주차 (84) | 2024.02.11 |
---|---|
우리 fisa 2기 '클라우드 서비스 개발' 11주차 (163) | 2024.02.04 |
우리 fisa 2기 '클라우드 서비스 개발' 9주차 (1) | 2024.01.21 |
우리 fisa 2기 '클라우드 서비스 개발' 8주차 (6) | 2024.01.14 |
우리 fisa 2기 '클라우드 서비스 개발' 7주차 (4) | 2024.01.07 |
블로그의 정보
DevSecOps
개발하는지호