{"componentChunkName":"component---src-pages-about-js","path":"/about/","result":{"data":{"allMarkdownRemark":{"edges":[{"node":{"id":"76a39bb6-2e18-55e7-9c9c-72d3cf524e0a","excerpt":"200524 JPA Tags: Java, Server Layered Architecture Presentation layer : View Control layer: Controller Business layer: Service Persistence layer: DAO(Data…","html":"<h1 id=\"200524-jpa\" style=\"position:relative;\"><a href=\"#200524-jpa\" aria-label=\"200524 jpa permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>200524 JPA</h1>\n<p>Tags: Java, Server</p>\n<h1 id=\"layered-architecture\" style=\"position:relative;\"><a href=\"#layered-architecture\" aria-label=\"layered architecture permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Layered Architecture</h1>\n<ol>\n<li>Presentation layer : View</li>\n<li>Control layer: Controller</li>\n<li>Business layer: Service</li>\n<li>Persistence layer: DAO(Data Access Object, Repository) ← 데이터에 영속성을 부여해줌</li>\n<li>Domain Model layer: VO(Value Object), DTO(Data Transfer Object)</li>\n</ol>\n<h2 id=\"dto\" style=\"position:relative;\"><a href=\"#dto\" aria-label=\"dto permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DTO</h2>\n<ul>\n<li>로직을 갖지 않는 순수한 데이터 객체</li>\n<li>속성과 getter, setter만으로 이루어진 클래스!</li>\n<li>VO는 DTO와 거의 비슷하나 read only 속성을 가짐</li>\n<li>DTO는 전송되는 데이터의 컨테이너, VO는 데이터 그 자체(객체)의 의미로 사용됨</li>\n</ul>\n<h2 id=\"dao\" style=\"position:relative;\"><a href=\"#dao\" aria-label=\"dao permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DAO</h2>\n<ul>\n<li>DB로의 접근을 전담하는 객체</li>\n</ul>\n<hr>\n<h1 id=\"persistence영속성\" style=\"position:relative;\"><a href=\"#persistence%EC%98%81%EC%86%8D%EC%84%B1\" aria-label=\"persistence영속성 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Persistence(영속성)</h1>\n<ul>\n<li>Entity를 영구적으로 저장해주는 환경</li>\n<li>프로그램을 종료해도 데이터를 잃지 않도록, DB에 데이터를 저장하는 것 == 영속성을 부여하는 것</li>\n<li>Persistence Framework는 SQL Mapper와 ORM으로 구분</li>\n</ul>\n<h2 id=\"ormobject-relational-mapping\" style=\"position:relative;\"><a href=\"#ormobject-relational-mapping\" aria-label=\"ormobject relational mapping permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ORM(Object-relational mapping)</h2>\n<ul>\n<li>객체와 테이블의 매핑</li>\n<li>\n<p>객체의 메소드 호출만으로 쿼리를 수행할 수 있음</p>\n<ul>\n<li>ex) SELECT * FROM user == user.findAll()</li>\n</ul>\n</li>\n<li>이 둘을 mapping하는 것은 ORM framework</li>\n<li>Persistant API라고도 부름</li>\n<li>ex) JPA, Hibernate</li>\n</ul>\n<p>cf) <strong>SQL Mapper</strong> </p>\n<p>→ ORM이 객체 - 데이터의 매핑이라면, SQL Mapper는 객체 - SQL 쿼리의 매핑</p>\n<p>→ ex) Mybatis, JdbcTempletes</p>\n<h1 id=\"jpajava-persistence-api\" style=\"position:relative;\"><a href=\"#jpajava-persistence-api\" aria-label=\"jpajava persistence api permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>JPA(Java Persistence API)</h1>\n<p><a href=\"https://www.notion.so/Copy-of-JPA-YouTube-aaf597bc74474145904450f94a2f7623\">Copy of JPA YouTube 강의</a></p>\n<ul>\n<li>\n<p>ORM을 사용하기 위한 표준 인터페이스 모음</p>\n<ul>\n<li>이 때, JPA를 구현하는 Implementation들을 ORM Framework라 부른다</li>\n<li>ex) Hibernate, EclipseLink, DataNucleus, OpenJPA</li>\n</ul>\n</li>\n<li>\n<p>세가지 구성요소</p>\n<ol>\n<li>javax.persistence.* 패키지로 정의된 API 그 자체</li>\n<li>JPAL(Java Persistence Query Language)</li>\n<li>객체/관계 메타데이터</li>\n</ol>\n</li>\n</ul>\n<h2 id=\"jdbcjava-database-connectivity\" style=\"position:relative;\"><a href=\"#jdbcjava-database-connectivity\" aria-label=\"jdbcjava database connectivity permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>JDBC(Java Database Connectivity)</h2>\n<ul>\n<li>DB에 접근할 수 있도록 Java에서 제공하는 API</li>\n<li>모든 Persistence Framework가 내부적으로 사용하고 있다</li>\n<li>DB에서 자료를 쿼리, 업데이트하는 방법 제공</li>\n</ul>\n<h2 id=\"hibernate\" style=\"position:relative;\"><a href=\"#hibernate\" aria-label=\"hibernate permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Hibernate</h2>\n<ul>\n<li>JPA의 구현체 중 하나</li>\n<li>JDBC API가 내부에서 동작하고 있지만, 개발자가 직접 SQL을 작성할 필요는 없음</li>\n</ul>\n<h2 id=\"jpa의-동작과정\" style=\"position:relative;\"><a href=\"#jpa%EC%9D%98-%EB%8F%99%EC%9E%91%EA%B3%BC%EC%A0%95\" aria-label=\"jpa의 동작과정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>JPA의 동작과정</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 29.666666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAAAwElEQVQY042RTQrCMBCFgx5KbyDoKQTv4cZzCQFLFoIrD9FN/5vQtJPEl9BIXKgd+JjM8PKYSRhDOOdWc95aa+9KKZHS972QUgoiEtBEbuAJ/Sl6ABYCzWi4d19iGIaPepqmeLzMd9dvw2TCnVeM40hd11HTNAQjatuW8jwP2ffLsqS6rvVseP5rqLWmoigCWJmwLlVV5U0CeALfW2R4WLIyniitf668gTjDVBwTcJ89mCjUxhgOTeQKHtAf0095AWTZcpPYg3WVAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20JPA%20af566361ed454afe8d7b86ad6d1b7e25/Untitled.png\"\n        title=\"200524%20JPA%20af566361ed454afe8d7b86ad6d1b7e25/Untitled.png\"\n        src=\"/static/3059651462ce352321370f3e6c5c2b2f/c1b63/200130-1.png\"\n        srcset=\"/static/3059651462ce352321370f3e6c5c2b2f/5a46d/200130-1.png 300w,\n/static/3059651462ce352321370f3e6c5c2b2f/0a47e/200130-1.png 600w,\n/static/3059651462ce352321370f3e6c5c2b2f/c1b63/200130-1.png 1200w,\n/static/3059651462ce352321370f3e6c5c2b2f/d61c2/200130-1.png 1800w,\n/static/3059651462ce352321370f3e6c5c2b2f/1df5b/200130-1.png 1999w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>\n<p>JPA는 애플리케이션과 JDBC(Java DB connectivity)사이에서 동작한다</p>\n<p>→ 개발자가 직접 JDBC를 쓰는 것은 아님</p>\n</li>\n</ul>\n<h2 id=\"jpa를-사용하는-이유\" style=\"position:relative;\"><a href=\"#jpa%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0\" aria-label=\"jpa를 사용하는 이유 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>JPA를 사용하는 이유</h2>\n<ol>\n<li>SQL 중심적 개발 대신 객체 중심으로 개발 가능</li>\n<li>Java Collection에 데이터를 넣었다 뺐다 하듯이 사용 가능(간단한 CRUD)</li>\n<li>\n<p>유지보수가 편리하다</p>\n<p>→필드가 바뀌어도 모든 SQL을 수정할 필요가 없다</p>\n</li>\n<li>Object와 RDB들 간의 패러다임의 불일치들을 해결해준다</li>\n</ol>\n<p><a href=\"https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html\">[JPA] JPA란 - Heee’s Development Blog</a></p>\n<p><a href=\"https://gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html\">[JDBC] JDBC, JPA/Hibernate, Mybatis의 차이 - Heee’s Development Blog</a></p>\n<h1 id=\"트랜잭션transaction\" style=\"position:relative;\"><a href=\"#%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98transaction\" aria-label=\"트랜잭션transaction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>트랜잭션(Transaction)</h1>\n<p>:DB의 상태를 변환시키는 작업 단위</p>\n<h2 id=\"acid트랜잭션의-특징\" style=\"position:relative;\"><a href=\"#acid%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-%ED%8A%B9%EC%A7%95\" aria-label=\"acid트랜잭션의 특징 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ACID(트랜잭션의 특징)</h2>\n<p><a href=\"https://victorydntmd.tistory.com/129\">[DB이론] 트랜잭션(transaction)과 ACID 특성을 보장하는 방법</a></p>\n<p><a href=\"https://mangkyu.tistory.com/30\">[Database] 8. 트랜잭션, 동시성 제어, 회복</a></p>\n<ul>\n<li>\n<p>Atomicity(원자성)</p>\n<ul>\n<li>트랜잭션의 연산은 DB에 모두 반영되거나, 모두 반영되지 않아야 한다</li>\n<li>하나의 연산이라도 오류가 발생하면 트랜잭션 전체가 취소되어야 한다</li>\n<li>Transaction은 Commit되거나 Rollback된다</li>\n</ul>\n</li>\n<li>\n<p>Consistency(일관성)</p>\n<ul>\n<li>트랜잭션이 DB의 고정요소들을 변화시키지 않는 것/ 제약조건을 위배하지 않는 것</li>\n<li>ex) 트랜잭션이 계좌 엔티티의 잔고 필드를 integer에서 string으로 바꾸면 안된다</li>\n<li>ex) 트랜잭션 수행 후</li>\n</ul>\n</li>\n<li>\n<p>Isolation(격리성)</p>\n<ul>\n<li>트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들어서는 안된다</li>\n</ul>\n</li>\n<li>\n<p>Durability(지속성)</p>\n<ul>\n<li>성공적으로 수행된 트랜잭션은 영원히 반영된다</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 565px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAACo0lEQVQoz02TWU8TURTH+7X8Aj4YlyfjkhgfxGh8EIgkLmgFcSOgcUlMjFuMikGwIig0LJIihWkptralHdrOTBe60CpCW+zen7eLhJOcO/dm7pz8t9FVaVS12tgVyxXGAlFGlDijaqMNgRhSKMmEJ8mwM8GoO8FmNle/XxHfVZtdK11tKZdK9UO5WCCY2uDEnIe2nxFO2zQOmf3smZU5OOPiwqRK61Sc/UMaHeMKpWKpCaax1IbqVpO/uGK24l5PQqHA+laGbknmgVPj2pKflu8ezpi99FpleqYVrk6HaR8PMi5QVsslgbCBstJkqnNFQrQOvGQ5pEGpzEZ2m1tLq+htAe7+UOh3qHTZFN65ZGy+Sb45BjE5DcSDU6Q9z4hI91iT+siqBor5DLpwIsSjV70oUZVKoUggkeKU5OemP0WbK8pxW4h9ksp+kw+Tf5KPc90YHY+xrr4nbb+B/c1e7AMHSM2eZCM4iy6SDPP6y1O8mkz+b550Ls+jZR+PHQq9Nh96i0yX1Y9RXsGtjGN2j7AcmCIRXiTj/0Dc9Yao/QWpwGRDw8h6mM/m96gxlVKuQHxzi7bvK1z/odIpaJ9dkDli8nJx0cWMoDps6scw/5CV0DzFpnD/k1LXMJQI82TgPkpMoywoB4VJ5yQfPd4Yna4Ievca7cLxFjF4STUyvdSHxfcCZ9BIvpBrulxptkDoWBPxGPuEFBSmlMuk8wX6JA93LF76hbO1Z9eCh6/ClCGrhefzEm8XLWxmso0cVio7kakjXE9nGJQVYumsoJxDS/7mvMVPjxzntkDZIdAdtWocm/NyeTZK59wfDn+Oc8moUhQx2/1T7AR7p8SLVGabdrMHvV3joohL57JCh9Dy6qKMfkoEe0LjzGgAgzNeV682a/fAfyi3+ZwX95gjAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20JPA%20af566361ed454afe8d7b86ad6d1b7e25/Untitled%201.png\"\n        title=\"200524%20JPA%20af566361ed454afe8d7b86ad6d1b7e25/Untitled%201.png\"\n        src=\"/static/21d170256aab71fcf6b409e1e34e7d1b/07eba/200130-2.png\"\n        srcset=\"/static/21d170256aab71fcf6b409e1e34e7d1b/5a46d/200130-2.png 300w,\n/static/21d170256aab71fcf6b409e1e34e7d1b/07eba/200130-2.png 565w\"\n        sizes=\"(max-width: 565px) 100vw, 565px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n</li>\n</ul>\n<h3 id=\"원자성지속성-보장\" style=\"position:relative;\"><a href=\"#%EC%9B%90%EC%9E%90%EC%84%B1%EC%A7%80%EC%86%8D%EC%84%B1-%EB%B3%B4%EC%9E%A5\" aria-label=\"원자성지속성 보장 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>원자성/지속성 보장</h3>\n<ul>\n<li>회복 관리자 프로그램을 이용</li>\n<li>롤백 세그멘트(rollback segment)에 트랜잭션 수행 직전의 상태를 보관</li>\n<li>오류가 발생해도 롤백이 가능하다</li>\n<li>일부만 진행된 트랜잭션을 취소시킨다(원자성)</li>\n<li>값을 트랜잭션 이전의 상태로 복원한다 지속성</li>\n</ul>\n<h3 id=\"일관성격리성-보장\" style=\"position:relative;\"><a href=\"#%EC%9D%BC%EA%B4%80%EC%84%B1%EA%B2%A9%EB%A6%AC%EC%84%B1-%EB%B3%B4%EC%9E%A5\" aria-label=\"일관성격리성 보장 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>일관성/격리성 보장</h3>\n<ul>\n<li>동시성 제어로 해결해야 한다</li>\n<li>\n<ul>\n<li>무결성 제약 조건을 통해 일관성을 보장한다</li>\n</ul>\n</li>\n<li></li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 720px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 133.33333333333331%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAbCAYAAAB836/YAAAACXBIWXMAAAsSAAALEgHS3X78AAAFCklEQVRIx01U2VIbSRDU/67BH7AvtnHYsbu2AXMJAQIhoVuje3SM5tLoPpFZf09uZouw96Gip7unszKzqju28+uY2AVMO0UsBhZm/QpGmvfKJkZ2HqNODpNeEWHrCZNuAcN21qyZ0Hcrg2W/gLVTRGzjWph3i1i7VWyCJlZMIKD5oIKlqwQlJqoQsIBxN49pv7gPzQk47eR5voAVwZZcjz0HDQOm8Tls4XnYxnbYwm7UxnPU5HcTm2EDS7+KhWdx3sCP8X7veVjnWQsrJly7FQMae4la+Dnu4N+xjblTRtTOY9Iv48eEa7OuiZ/znhlfph3sxm0Dugnr+whqWBHUAA7KYtjELmpj5dUpscafxIjZmUjMxpTm1h6MXyse3pLZmkAKzdcCJPu1twc1krcBf2DsRjZeJmLSJUPbsJHMQZWAdvYX4JbJnmnJOqQVXnXPlKAb/hsT2IJSNxzlnaQqZvRF7IJ2Bv3KHQbWPdfKmImJ2AuQSlYiQ2Ax3QP6pMwPUwCGfJJfcx4e1O4x6kmqRfbaJyMWYiMfqWBDAmsq3BhgyvcJuGBbrAkqQHm2Y3FepraROurlsSTYOqBHIQ8Ma1hS3nbSxo6Jt6OW8XJDhvJxJcAJG3ehKnHDjK9+SoKquSWjCYHngxL9spiAilg4xYLspjyzIKE5C7L0WJSxnTPylEFNvJIFjJlTgldPoVe+RT19jsbThfFSvu6rKwJVzosmyVzALttm0nkF9MpYOpJfJasar1cG1sMJao+naKTPUEl+hVsVoGxgReUnGevWyA6tLYkRmxJwSTlzZp7xaukneaHNxaDIpi1hbGe4l+W8wBvDfR1mYhHRHV/9H3DYeOTjkDXRycVhF66NTK/+gBnZLBw+Du20ATXBtSmVSPqwnUNk7xkv6N9CgKFag6+FopOPo1+6MTfDb6QIlGGiDLxqEkH9HlErzRuTxVTM6Peos395NBfgnGpivnWHqJE2gOP2E32kyTRXHoZk75Sukbv6jMrdVwM6bKZ537OmrSRZL9BMFZYFAvQqtwh1V5ldgPJxQUmOlURVRWFYyW9kniDYAyadJ0QEVTHVCWM+XRp/AQaU45ZfQQkoL2f8SS1SS31Hiy3TLybgMrHHKs/pYVh/NKrUcgIU46mzfycJeA+fbAI+AMos6Xo0e4UEmR2jlTlHN3fJpDcYNVOY0tOAvoe1FIYE1iMbNlkDA55jlcnMIxuB7gHThqWdvUQ+/hdKib/RSJ0YQBVw3HqEfBcRzaOmvNY5WmE/IRYR0C3dwqGsIW9GxEKMCNxn+7TY0L38FeSzrAksyq6wC8oJk8ChCoVr/QaOhZLLEOCALaNwitdMcg2PB30CaPTKmse5zuD+gAkdJusbO+6Mrx6BY9bNF1QS/6B+z4reH8PmnbUzZ/BV1eotRvW731Fji9VYwOoNfCUgsMf/3KLseKS3KcSUZVCImw2/fGPCK8YRkElksRBVxe1r3GBYSSAgmF+64j8E5Nk+/e7nqaqSZB9ywX8FCyjP/Fy8QshRhyMrQaD9GJb3iRQ9qihcfEKVCvPnn/j9GbXkCWJunh6QpU9WAuplTtF5PEb/6RRO7jsGuTM42VOun5i9Lsdu+gTt1DEayS+w2fg2u6D9QLvYtzG/cAEvf85D35E++RMX79/g8t0fuD46wPXHQ8Q/HuDq6A2uPhwgfnTI77f8fouLdwe4fM+9D4conr1D5+Ebwb/hP3zqi9VVZU3KAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20JPA%20af566361ed454afe8d7b86ad6d1b7e25/Untitled%202.png\"\n        title=\"200524%20JPA%20af566361ed454afe8d7b86ad6d1b7e25/Untitled%202.png\"\n        src=\"/static/43f7964b2571ac63687fcabbb93b9a85/37523/200130-3.png\"\n        srcset=\"/static/43f7964b2571ac63687fcabbb93b9a85/5a46d/200130-3.png 300w,\n/static/43f7964b2571ac63687fcabbb93b9a85/0a47e/200130-3.png 600w,\n/static/43f7964b2571ac63687fcabbb93b9a85/37523/200130-3.png 720w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>","frontmatter":{"title":"","date":null,"lang":null}}},{"node":{"id":"1a7bd11a-295d-518e-bfea-2a1ca3e91c05","excerpt":"200525 TLS/SSL Tags: Network…","html":"<h1 id=\"200525-tlsssl\" style=\"position:relative;\"><a href=\"#200525-tlsssl\" aria-label=\"200525 tlsssl permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>200525 TLS/SSL</h1>\n<p>Tags: Network</p>\n<h1 id=\"암호화\" style=\"position:relative;\"><a href=\"#%EC%95%94%ED%98%B8%ED%99%94\" aria-label=\"암호화 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>암호화</h1>\n<h2 id=\"대칭키-암호\" style=\"position:relative;\"><a href=\"#%EB%8C%80%EC%B9%AD%ED%82%A4-%EC%95%94%ED%98%B8\" aria-label=\"대칭키 암호 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>대칭키 암호</h2>\n<ul>\n<li>암호화키와 복호화키가 동일</li>\n</ul>\n<h2 id=\"공개키-암호비대칭키-암호\" style=\"position:relative;\"><a href=\"#%EA%B3%B5%EA%B0%9C%ED%82%A4-%EC%95%94%ED%98%B8%EB%B9%84%EB%8C%80%EC%B9%AD%ED%82%A4-%EC%95%94%ED%98%B8\" aria-label=\"공개키 암호비대칭키 암호 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>공개키 암호(비대칭키 암호)</h2>\n<ul>\n<li>암호화키와 복호화키가 따로 있음</li>\n<li>외부에 공개되는 키가 암호화/복호화 용인지에 따라</li>\n</ul>\n<h3 id=\"공개-키-암호\" style=\"position:relative;\"><a href=\"#%EA%B3%B5%EA%B0%9C-%ED%82%A4-%EC%95%94%ED%98%B8\" aria-label=\"공개 키 암호 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>공개 키 암호</h3>\n<ul>\n<li>공개키로 암호화, 비밀키로 복호화</li>\n<li>비밀키를 갖고있는 사용자만 해독 가능</li>\n</ul>\n<p>→ 아무나 우체통에 편지를 넣을 수 있지만, 꺼내는 사람은 키를 가진 사람 한 명 뿐!</p>\n<h3 id=\"공개-키-서명\" style=\"position:relative;\"><a href=\"#%EA%B3%B5%EA%B0%9C-%ED%82%A4-%EC%84%9C%EB%AA%85\" aria-label=\"공개 키 서명 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>공개 키 서명</h3>\n<ul>\n<li>비밀키로 암호화, 공개키로 복호화</li>\n<li>비밀키를 갖고있는 사용자만 암호화 가능</li>\n</ul>\n<p>→ 인장으로 편지봉투를 봉하면 누구나 열어볼수 있지만, 발신자가 무조건 본인임을 증명 가능</p>\n<h2 id=\"참고-해시\" style=\"position:relative;\"><a href=\"#%EC%B0%B8%EA%B3%A0-%ED%95%B4%EC%8B%9C\" aria-label=\"참고 해시 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>참고) 해시</h2>\n<ul>\n<li>데이터를 특정길이의 다른 데이터로 전환하는 것!</li>\n<li>복호화할 수 없으므로 엄밀하게 암호화는 아니다</li>\n</ul>\n<h1 id=\"tlsssl\" style=\"position:relative;\"><a href=\"#tlsssl\" aria-label=\"tlsssl permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>TLS/SSL</h1>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 560px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 63.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsSAAALEgHS3X78AAACxklEQVQ4y22TC08aQRSF+cdN6gs11WotasHWBwsLCAhCRKGKtuCCBHl0QXk/bEWrlmJitEYTE2BB0NOZQYxJu8mXu3N25+y9c+/KHh8f8b+r3W7B5smDc+Wg28iDX88R8gy6foasOWcGWlcWB6VfkNHNl5eXODw8RLlcZjw8PKDRaGBpfQcOIQy904/1QBQ6pw9OXxhmdxAGVwAuf4hofnhjGQjxDIKRWMeQGpydnaFYLKJWq7EMJakJYTeAg6MEiT4cnabgDQrIFKKIJiLwBH0o/hCxvetH6TSH0995REVi2G63Qbm/v2dZUXO6luo1TJji6OfTGNAmMKRPkZjEsCGDIYJcl8IbYxb9ROvT7EPOJxCK5yFrtVrMqGtYrVaZaa1WxTg1NKQxbCIGi2n068hmfo8hX0yhV7vP4qAxDTl5L7RX7JTcvaghLb1UKuHk5wkmrR6otgSo3F5MuzwYtbgx5drCiNkOxaob43Yv5oUQ5rYDUG2KCESykFUqFZyfn+Pi4gJXV1fsDOtSnZRch8ISxshyBGO2CEatYfSovZDrtzGoF0ipX9HLCXi3IhK+kedx7MYKkNESKZIk4ebmBnd3d4zrP9eYskcxvZkmWVIyUJL7CUcU71dFfHCnMPMl8xzH7MRQzP9bMjWnGVfKFXxyhWHcK8AUy8NEDnxRzGJma4ehCyeJViBaDpZkEUp3rFMybUCz2QRtDr2nkUK7/NYg4tVCHL2aOHq4DgO02/pOQ14/aTT2kXW42xQ62LQZdKhvb29ZtnWpASX/GWreAk5vIyxDrbNiekYDhVKNee0SOIONaMvQGqyYVK8hSM+QbqYZ0qE+Pj5mM8jKb7YwpVkDx5ug0VsIxEBnhmpWA+UnjnzI9KQtgTeYoVhwYCdKzrD7L9M5pKW+/JeNG0l8tO9j3pHE3EqCsbCaYsy90Gaf9Nz3E/wFG9tZGiCeU7AAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled.png\"\n        title=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled.png\"\n        src=\"/static/7a79541254f7de53ea2b8da28ff72ebd/b06ae/Untitled.png\"\n        srcset=\"/static/7a79541254f7de53ea2b8da28ff72ebd/5a46d/Untitled.png 300w,\n/static/7a79541254f7de53ea2b8da28ff72ebd/b06ae/Untitled.png 560w\"\n        sizes=\"(max-width: 560px) 100vw, 560px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>TCP/IP 계층에서 Application Layer에 속함</li>\n<li>TLS 1.0 == SSL 3.0, 같은 말이라는 뜻</li>\n</ul>\n<blockquote>\n<p>악수(HandShake) ⇒ 전송(Session) ⇒ 통신종료</p>\n</blockquote>\n<p>이중 HandShake가 너무너무너무너무 중요함</p>\n<h2 id=\"ssl-handshake\" style=\"position:relative;\"><a href=\"#ssl-handshake\" aria-label=\"ssl handshake permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SSL Handshake</h2>\n<ul>\n<li>데이터 전송(Session) 때 사용할 대칭 키를 서로 안전하게 확보하는 것이 목표!</li>\n</ul>\n<p>사진출처) 내가 만듦</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 54.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAABfklEQVQoz51S226CQBTk/3/G9Bd8kapt4oNpmoCArIDITS6CIEx3UGyCJE16yGTZ25w5s0cJggCqqvZYLpeYz+fYbrfYbDZYr9dYrVbwfR+32w3X6xV1Xb+gbVswuq6DUlUVPM+DaZqwLAuGYUDTtB5c03UdYRgiSRLEcTwJkg6hOI6D2ewNeZ7jvyGEgOu6yLIMCrMvFou+JJKez2fkcmMIlvFXUBTvkkNh/ZTMieu5sB0B4R6QFwWK4oLLReIxUkGaZn1SguWWZSnPFc/EStM0yOQhLmiWjvX2E1/GN0zpJz2ll7vdrveSPlLJ8Bh8JApK07QX9Ev4KDGULy5sgZN/6j3Z7/eS2IRt27CFDXYEX3xswwshs/IQFzv5MSvn44tde19jZ9A3JrqrLsaEhZRfS0+Spz/n5D5GcYSD70BIOL6LKIyk0hBH79i3G/3Lsny65KkoqxLqxzsMYeJwdBCc7mUT7BAS8f6TkOWRdGiRMbifSwVNPX2GwfvD/w86M0yjvEiFdgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%201.png\"\n        title=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%201.png\"\n        src=\"/static/1651999551a13a2d36e2a87dcde508e1/c1b63/Untitled%201.png\"\n        srcset=\"/static/1651999551a13a2d36e2a87dcde508e1/5a46d/Untitled%201.png 300w,\n/static/1651999551a13a2d36e2a87dcde508e1/0a47e/Untitled%201.png 600w,\n/static/1651999551a13a2d36e2a87dcde508e1/c1b63/Untitled%201.png 1200w,\n/static/1651999551a13a2d36e2a87dcde508e1/fde66/Untitled%201.png 1574w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAABiUlEQVQoz5VSa2vCQBD0//8i+8lCoWBLi4qirajVJBrzfl2SS0ymtxuTKrZCD4bsHbuzs7PpaZqGxWKB8XiMyWSC0WiE6XSK5XLJ9/l8jtlsht1uB13XQfkt2vt2u2VQTg/qOI6D4XB4BSJuYyJP0/RXZFmGy8OEpmkyTqcTqqpi5HnexWVZcuFf8H2fyameCQeDR/T7D1xc1zX+cyh/vV7zlEVRNIQ/impIKRl0J8icYtm9U5EQAofDHntDQyoSxElyPXIhCyTqUYgUURRxQUvY+kRvIhGcF0YxDpaH8acBO0gUqeimawjPXXkEBU958qEWsVKjmJbFm7Rtm8eihp7n42BaWO4spLJSTeLOqhtCMtb92mD1+oLV+xu05yfomw3y87i0IPoS6qrkmii6Q8gJQQBfqfFdF+7xqBS5qO4s64awLIvGB6VOypzReJgpZeflKIWk/qga6JrOP7FhGOxvHF8QyrJCJkskqYQXJnC8EK4fXcP12D9XKQ7DsEEQIlCTUCOyoSX8Bh/XSdk+1Rn+AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%202.png\"\n        title=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%202.png\"\n        src=\"/static/dc216d05f4b7eef730cd5a13f2225a49/c1b63/Untitled%202.png\"\n        srcset=\"/static/dc216d05f4b7eef730cd5a13f2225a49/5a46d/Untitled%202.png 300w,\n/static/dc216d05f4b7eef730cd5a13f2225a49/0a47e/Untitled%202.png 600w,\n/static/dc216d05f4b7eef730cd5a13f2225a49/c1b63/Untitled%202.png 1200w,\n/static/dc216d05f4b7eef730cd5a13f2225a49/6568d/Untitled%202.png 1660w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 54.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAABlUlEQVQoz4VSa2+CQBD0//+t9gNqrZGmsamNTeXlIeBxHAgITnfX2mircckGuMfszuwMQKG1RhAEkp7nQa3X2G638r/ZbJCmKQ6HA24F751ywAtKKUynU4xGI4zHY4woXdfF5OkJk8kE8/kcWZZJ4Wt5XkwAF4sPSY48z5GEHhIqEsexdFiWJbquQ9u2V5PPWGvR9/0RcOgM8fDwiKZphF6kPMQqks6jKJI1BrwVq9UKSZJgt9sdAau6wSIqEG8STJ+f4b68wn37hOM4Qtn3fTl80utcN46isJeUy7KCsRU6anm5XIpmDOoMHcxmM4RhKKApdcHB1C4Bi18GAsjVW6Jbdw10Y5DXBpnJUOxLmNZiHSt4foCQNGVQHtBdwLquj1R+ntN3VVpo0jAnK1XLD+yo8F8L3QTsuh7tvpNNkxsaBlmFpxwG2Cvy5uIdX+TThjTn6fIQmf5/wIoBG3pX0NSJWhNFzxfbaLJRYYk6XSpIa0sDMMZI5jqXRtgyF4A9dcaViAv6NIEmjfgCa8UevBcMdpLhGxCETDtamIa5AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%203.png\"\n        title=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%203.png\"\n        src=\"/static/e69a2ad06155d5437d221da48321d2dc/c1b63/Untitled%203.png\"\n        srcset=\"/static/e69a2ad06155d5437d221da48321d2dc/5a46d/Untitled%203.png 300w,\n/static/e69a2ad06155d5437d221da48321d2dc/0a47e/Untitled%203.png 600w,\n/static/e69a2ad06155d5437d221da48321d2dc/c1b63/Untitled%203.png 1200w,\n/static/e69a2ad06155d5437d221da48321d2dc/17d12/Untitled%203.png 1666w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAABhElEQVQoz31T2W7CQAzs//8XfeEQSAUq9QFyBwjZ7JE7YWpvmlS0gKVRsl7v2J71voEsTVMcj0e4rgvHcRAEAZIkged5OJ1OOJ/PuN1ueGW8z3jjhRApNpsNVqsVFosF5vO5XS+XS4vdbofr9YpMSmRKQdJ3Qpah7/uJ2BLu95/YfmxfpUfbtmiqCiURFkVhYfIcVV3bDoQQaJpmIFyv15jN3slR22xj+WMrGNulw2UcWRmiMEQSx6iJmCVi2SZCPlRT8DNdfjH4uVVBEkBJQCsYbaYCLCEza3IqaofL5wspy/IfKZsxBiFVx3Ga/tm01ui67p7Q/Gxy6RVpNQr9l5D9ZVlRnJhiHhLmeYGenHEUUSfyScsEIhGU9EIV0uI5Id+azGvEV4WvQCAr2ocXXtQdwkTCv0i4l9z6lHpYIY1AVZMuBZTOCQYlJYnpJg+Hgx16Ho2cfBzDEFIPclHsHSG3wnrw8AZ+YEeChQ+DkIg8ekWOfUG+7w9+AsfwuHCScdTYvgEvh1EVYN5eGgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%204.png\"\n        title=\"200525%20TLS%20SSL%20376350998350494eb1b0c6e2fca91508/Untitled%204.png\"\n        src=\"/static/2022743cbaa31781b3163da97eb6a398/c1b63/Untitled%204.png\"\n        srcset=\"/static/2022743cbaa31781b3163da97eb6a398/5a46d/Untitled%204.png 300w,\n/static/2022743cbaa31781b3163da97eb6a398/0a47e/Untitled%204.png 600w,\n/static/2022743cbaa31781b3163da97eb6a398/c1b63/Untitled%204.png 1200w,\n/static/2022743cbaa31781b3163da97eb6a398/6a5c3/Untitled%204.png 1646w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>⇒ 복잡한 과정이지만 아무튼 요지</p>\n<p>서로간의 대칭키를 안전하게 확보하면서 공개키 암호와 대칭키 암호의 각각의 장점만을 취함</p>\n<p>SSL이 이렇게 튼튼하다!</p>","frontmatter":{"title":"","date":null,"lang":null}}},{"node":{"id":"af50d0c0-0b62-5629-88e6-a728455cdde5","excerpt":"200524 Spring Framework Tags: Java, Server :Java EE 개발을 위한 오픈소스 애플리케이션 프레임워크 cheese10yun/spring-guide 특징 경량 컨테이너로 자바 객체를 직접 관리 POJO 방식의 프레임워크 IoC Container DI…","html":"<h1 id=\"200524-spring-framework\" style=\"position:relative;\"><a href=\"#200524-spring-framework\" aria-label=\"200524 spring framework permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>200524 Spring Framework</h1>\n<p>Tags: Java, Server</p>\n<p>:Java EE 개발을 위한 오픈소스 애플리케이션 프레임워크</p>\n<p><a href=\"https://github.com/cheese10yun/spring-guide\">cheese10yun/spring-guide</a></p>\n<h1 id=\"특징\" style=\"position:relative;\"><a href=\"#%ED%8A%B9%EC%A7%95\" aria-label=\"특징 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>특징</h1>\n<ol>\n<li>경량 컨테이너로 자바 객체를 직접 관리</li>\n<li>POJO 방식의 프레임워크</li>\n<li>IoC Container</li>\n<li>DI 지원</li>\n<li>AOP</li>\n<li>영속성과 관련된 다양한 서비스 지원</li>\n<li>높은 확장성</li>\n</ol>\n<h2 id=\"pojoplain-old-java-object\" style=\"position:relative;\"><a href=\"#pojoplain-old-java-object\" aria-label=\"pojoplain old java object permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>POJO(Plain Old Java Object)</h2>\n<p><a href=\"https://m.blog.naver.com/writer0713/220700687650\">[java] POJO란?</a></p>\n<p>:말 그대로 오래된 방식의 간단한 자바 객체를 의미한다</p>\n<ul>\n<li>개발자의 노고를 덜기 위해 EJB라는 개념이 널리 사용되었음</li>\n<li>그런데 EJB의 1만큼을 사용하기 위해 99의 짐을 추가로 지고 가야하는/ 배보다 배꼽이 더 큰 상황 발생</li>\n<li>POJO 기반의 프레임워크를 사용하자!</li>\n</ul>\n<p>현재의 POJO 프로그래밍의 의미 : 객체지향적인 설계원칙을 잘 따르며, 의존성이 적고, 테스트가 용이한 코드</p>\n<h2 id=\"spring-bean\" style=\"position:relative;\"><a href=\"#spring-bean\" aria-label=\"spring bean permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Spring Bean</h2>\n<p>:Spring이 다루는 POJO</p>\n<p>Spring IoC Container에 의해 인스턴스화, 관리, 생성된다</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 879px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 26.666666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsSAAALEgHS3X78AAABTUlEQVQY0z2QS07CUBSGuw2HjlyDC3AHDhy4BBfgDkyc4EQHTJwYwkCJQnzEOBBCIBRJeAnGFIuVx6X0CgV621Lu+S0Y+JMv+U9yzhl8CgAH/5FLXNeTRCTX85pFiCS56jorymT2VAYuk9M5pCX8zZ7yyafC9Tz8jkbUZwNU6w2YQw5JAYRrw5eEcpuhEkLhhR/4sGcWrHEHD1oHezcf2L2qIFIwwB0PSrI1FLkfDvX1he7vbqlaeqPel0H11iPF0xF6Mjx6Lmukvut0HC9SLKcv/9JkDtpPabRzWaGt8wJtn6Up37ZI8YOFiFa7yDR1yjZaSDW6OMlq6I0sTByOhDZBtMFxFFNxeJFB0+jCnpgY20O0WReRXAsHiRpqzF55U0LEwPFRMmdUsQTybIq86cBdYBO1P8V16XvVA99BnzFwzsGHA0hPrFQsE7rHHylcaSq4sVrgAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled.png\"\n        src=\"/static/f3c45be3f9692e37f32d3caa1828e015/bcb8c/200310-1.png\"\n        srcset=\"/static/f3c45be3f9692e37f32d3caa1828e015/5a46d/200310-1.png 300w,\n/static/f3c45be3f9692e37f32d3caa1828e015/0a47e/200310-1.png 600w,\n/static/f3c45be3f9692e37f32d3caa1828e015/bcb8c/200310-1.png 879w\"\n        sizes=\"(max-width: 879px) 100vw, 879px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>\n<p>기본적으로 Spring은 모든 bean을 singleton으로 생성하여 관리한다!</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 49.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsSAAALEgHS3X78AAACWUlEQVQoz1WSy2/TQBDGt4j/ilOPQMWNG6q4cgFVCAQStJdy4cqFwg0hoFRQISCCc+mL5v2onUft+JEmjp3E6zh+pM58bE1bwUg/fbuzmt2ZnWE+t2mgFWhkFMkVpGoWiRs58qwmxdMpue6I+v0+OY5DlmUJHdJgMBBqX/h936fJZELMLn+k2lOGyjJDbYUh+5gh/4Sh8IDBfDePU3P6DmS5Dq2tC22gJmehGzp0zUS9UYeiKJhOpxCXgrnaPhmbt9D9ukjWt0XqfFkkdfM2tTdukr37nPxkQNNkSMCMZhTRMKqSFyvkBCUKk77wI2VGRHEcE3ONAumZe2hnlsj4sQT1+xI6P+/jOHMHo/xrhDMfk7gDHqmw/G0RHaRZz2iMUVgR6uPcTkSWzC59IEmUKC0zOhSl5x8x7D1k2L/LoL25Ap7Y8CMTXlxHxdxCTuni4KiJPUnBtryHndY2SloPJcOE7bpgvNcgc+cl+r/XaJhbg51dwzD/CsODF+DNDGbi5WQWYxyr0Ee7GIcEHkTwQ6Djyuh5CrwwEb4AkyAEc6qfqf6Mobp6iWqrc8guz+Fg5TJyojnm+jW4SVcEtBCeDOBGcpppIsqcTHW4YRX/2mlj2Ej5Rdr7q+huXCfr0wIdbyyQvn6D9Lfz5GytEJ19+jnBSZ941CI/NsUZ/XeWNmU8iUjrchQP26irFmSlJ+ii2jBRlVU0m01IkoRyuYxKpYxm4whHLRXVioRSqYxarYZCoZCOTiDKZmEY0JiPUjwBd4epevxMPS+Fc3625hf7v3hi8N10sKMooj8+pb7ws67xXgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%201.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%201.png\"\n        src=\"/static/d9c3452d3e371d6444d344de27a52049/5a190/200310-2.png\"\n        srcset=\"/static/d9c3452d3e371d6444d344de27a52049/5a46d/200310-2.png 300w,\n/static/d9c3452d3e371d6444d344de27a52049/0a47e/200310-2.png 600w,\n/static/d9c3452d3e371d6444d344de27a52049/5a190/200310-2.png 800w\"\n        sizes=\"(max-width: 800px) 100vw, 800px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>Singleton: 하나의 bean 정의에 대해, 하나의 객체만 존재한다</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 800px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 49.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVQoz32SS2/TQBSF528hsYIdUsU/YIGQCpQFYoN4S+UHsIANZYVAQHkIiVCQEEIqj9IoCaR5OA8ndZynHSdx7MR2HDfnME5ZgeBK38wZ3dHMPbpXTMcmRtp32I1djPXd5e40k3Aa3+AaCoLZDP2+CcPowepbsKwBTNNcMhgM5NmSOQOu68L3fQhrbxOFa4K564LFG4Kpy5IrgulLgp3HRxmRrKs1lktV1mo1qrUKK5WqpMxGo0FN06goCh3HoXyQYtxMo5U4Q+P9KkxJd2sVeuIc9NenMEjewThswos0zCArCjIwvR3IP/5CLgjDEMJuZuQDZ6kl1tB8u8b9N+fZeneBncRpDlN3uYhvLyLOIoeTsE47yPBfcRBFFFZuE2VptXRLQMKfVwWT0nbyoqD+8Ag9TDn0Cux7X6h0c/xcbfNTUeHHfHHJtrS/s9/gbrPD3simcAwVrZ37NFMbGGY22E9tcPjjAUfpe3SqW5wjoBf2ZGV56iOVuU6deb0laTLX0FnqGlStAauSoevKCvOvULktmF8XKKzLZsSNkaRlla0nxzld2PTDLv15n5aXpDH58H/LtvYV2tMT7L5YQe/lClrPV6A9Ownt0TH0t28iRIT5gYvowMdk1oYdqFgAWCwWh8QacRDz+Rxi4s3QtjyW6gbLmklVt1iqdajUuqzsd7iX3aNSLLFaUVkslCRlqqq0nssxm80uiXW73abneRS+78F1bLjj0eH+h5bzJYfWwXQ6XQ5vrCeTyW/tLvMxcT4IAvwCw2m8jzwsZtUAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%202.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%202.png\"\n        src=\"/static/808627c824b850b4ef03a10f6d68a195/5a190/200310-3.png\"\n        srcset=\"/static/808627c824b850b4ef03a10f6d68a195/5a46d/200310-3.png 300w,\n/static/808627c824b850b4ef03a10f6d68a195/0a47e/200310-3.png 600w,\n/static/808627c824b850b4ef03a10f6d68a195/5a190/200310-3.png 800w\"\n        sizes=\"(max-width: 800px) 100vw, 800px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>Prototype: 하나의 bean 정의에 대해, 다수의 객체가 존재한다</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"제어의-역전ioc-inversion-of-control\" style=\"position:relative;\"><a href=\"#%EC%A0%9C%EC%96%B4%EC%9D%98-%EC%97%AD%EC%A0%84ioc-inversion-of-control\" aria-label=\"제어의 역전ioc inversion of control permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>제어의 역전(IoC, Inversion of Control)</h2>\n<p>: 프로그래머가 작성한 코드가 외부 라이브러리의 코드를 호출하는 경우가 아니라, 외부 라이브러리(프레임워크)의 코드가 프로그래머의 코드를 호출하는 것</p>\n<ul>\n<li>프레임워크가 전체 프로그램의 흐름을 결정하게 하자!</li>\n<li>\n<p>어떻게 하면 프레임워크가 내 코드를 호출하게 할 수 있을까?</p>\n<ul>\n<li>프레임워크의 interface, abstract를 구현한 후 프레임 워크에 넘겨준다</li>\n<li>== 객체를 프레임워크에 주입한다(DI)</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"의존성-주입di-dependency-injection\" style=\"position:relative;\"><a href=\"#%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85di-dependency-injection\" aria-label=\"의존성 주입di dependency injection permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>의존성 주입(DI, Dependency Injection)</h2>\n<p>:의존성+주입+의존성 분리</p>\n<p><a href=\"https://medium.com/@jang.wangsu/di-dependency-injection-%EC%9D%B4%EB%9E%80-1b12fdefec4f\">[DI] Dependency Injection 이란?</a></p>\n<ul>\n<li>의존성: A클래스 내부에서 B클래스 변수로 사용한다? → A클래스는 B클래스에 의존한다</li>\n<li>\n<p>주입: 외부에서 객체를 생성해서 넣어주는 것</p>\n<ul>\n<li>생성자 주입</li>\n<li>Setter 주입</li>\n<li>인터페이스 주입</li>\n</ul>\n</li>\n<li>\n<p>의존성 분리: SOLID의 ‘D’에 의거, interface를 이용하여 상위 계층이 하위 계층에 의존하는 상황에서 하위 계층의 구현으로 부터 독립됨</p>\n<ul>\n<li>제어의 주체를 interface가 갖게된다 ⇒ IoC</li>\n</ul>\n</li>\n</ul>\n<p>의존성 주입의 의의</p>\n<ul>\n<li>의존관계의 설정이 컴파일 단계가 아닌 실행 단계에서 이루어져 모듈들 간의 결합도를 낮춤</li>\n<li>코드 재사용성을 높임</li>\n<li>Mock 등을 이용한 Unit Testing의 편의성을 높여줌</li>\n</ul>\n<h2 id=\"관점지향-프로그래밍aop-aspect-oriented-programming\" style=\"position:relative;\"><a href=\"#%EA%B4%80%EC%A0%90%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8Daop-aspect-oriented-programming\" aria-label=\"관점지향 프로그래밍aop aspect oriented programming permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>관점지향 프로그래밍(AOP, Aspect-Oriented Programming)</h2>\n<p><a href=\"https://jojoldu.tistory.com/71\">AOP 정리 (3)</a></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 443px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 112.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAsSAAALEgHS3X78AAAEMklEQVQ4y51VzU9cVRR//4DRnWmraSouSGONiTHRVQ0ujCsTY5dGN9ZEk25sooadRAPVdKMBWygM/bAUmiIsqAzNAIWZgQIjQ0lTOkwV5vt9v5l532/m57l3mLFWbKI3+eV+nHt+97x7z/k9oVw2IEkiVFWBoigQRRG6poE113UhlkpQFRWKLFOv8N73fXiex/c2/OQGyCaoqopsNotCocA35PN5yGRgzbZtZDIZbisRMbPlcjl+kOM4yJFfntmKJW5nEERJxsJCDJOTU5hfiOL24hKyuQIndMgxeXcDN2emMROJIDI/h0QyiSAIOGly4y6mfg0jPBPBYmwJD1JpCOZvfagPPA38fAS4Qhh4Clbs6wZhPgP95ZfgPn8I1pHDcJ87iOqrr8A2HTj6DrTQUVihw6iE2mBeOAhj9E0I4fg6Pukewukfr3Gc7A7hRmSZE5qagd3QGEqDYyiGrqN0YRT5y+NwbBeuqcFInIOz8RPsjfNwkr2obF6GsDp0E71tHyH02imO3hc+RPTsKCe0DAniwucoRz+DHj0FI/oplNiX8FwTsuHizC8Kuieq6Jko45vxCvqmdQiVsRHYHW/Af+8dDqfjdZQHehuPohWQH3kX6shbkEfehnq1A6Xr78NzqhA1C52D9/DF4Da+GkrhdH8KPSPbROgHKNUBCQ2wsUFrrPl0+XKlBtUCdAdQTEAlBEENtcCnz1bh2xp8S+O9Z1GEaLZ6vYHW9K8x6gGKhVxzgic1gTnuh0dJPUqRzc1NPq7Vavg3HwbhSac1CVllpNPpf0b+fyM0DAPDw8O83Jrr/znCRyNhRNFodP/7fTzCSqXCRUEjQWB1zcZlioi1arXK13Vd52PWs/3NQ5p+zZ5BYJOdnR1SHIkbmFCIksSdmnMmFgxMGERRagnH7u4uFwe2r1gscvHghInVNYSnw4gvxbGyssKNnJBIEok13JoJYzEaw+2FRa4ovM5Jbba27iMyN4vZyCxWiYMdwAl3KUI2yVA0mUy25cRsOb6W4ZGyCCRJ+pu0ZbMZ7suiZxA8z6U8sxH4LnzPgWtb1Lt7UbjkSGueT1LmwbJsvsYalzAiDShHfYJHYzYXamQUNQei7kKp+JDKPiqWv/dmNWhyHqqUg64UUVZKdLjVelGdSItEovgeZDpUIWLBLN1HYqILkYudWJvswb3wWeS3GinyR07D4I076L06h9D4HYzd2sLmduM6gqqJVH8/5js7Ee/qwsaZ75C+dAlCdf086hefBcaOAtfa4fY/g0r8W+40tVzCBz9IOHlOxsd9Ik58n8eVSIPQevg77GPHgLYXgfZ2BAcOwDp+HIJNd7ZOL7kUjyG9/QA2v8NGRVgW2daTSKW2Ye/dp+f7rU82KG9Xl5f4ryAgH36HLOlZaamqRk7OY9VSA/srOo69bxUFJBS6Qclumi3bn3r1hb2xjS86AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%203.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%203.png\"\n        src=\"/static/9e6d5376c0525396fdc122f57d64e229/a120c/200310-4.png\"\n        srcset=\"/static/9e6d5376c0525396fdc122f57d64e229/5a46d/200310-4.png 300w,\n/static/9e6d5376c0525396fdc122f57d64e229/a120c/200310-4.png 443w\"\n        sizes=\"(max-width: 443px) 100vw, 443px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>\n<p>ClassA, B, C들에 반복 사용되는 흩어진 관심사(Crosscutting Concerns)</p>\n<p><a href=\"https://www.notion.so/cross-cutting-concern-dc633923985044829ba5eac8f837b611\">cross-cutting concern</a></p>\n</li>\n<li>흩어진 관심사를 관점(Aspect)로 모듈화하여, 비즈니스 로직 내에서 재사용하자!</li>\n<li>OOP는 상속, 위임으로 공통된 기능을 재사용하지만, 전체 애플리케이션 여기저기서 사용되는 부가기능들을 처리하는 데에는 한계가 있다</li>\n</ul>\n<p><a href=\"https://www.notion.so/Copy-of-Annotation-beade0b2883947589fb939eb46c74310\">Copy of Annotation</a></p>\n<h1 id=\"spring-모듈\" style=\"position:relative;\"><a href=\"#spring-%EB%AA%A8%EB%93%88\" aria-label=\"spring 모듈 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Spring 모듈</h1>\n<p>: Spring Framework는 20여개의 모듈로 구성된다</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 579px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 77.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsSAAALEgHS3X78AAADpklEQVQ4y1WS+U9aWRzF/Z9nktmSNo1bq1W0UpFFoOzgAs8FUJTHAx6oD5BNBVFkccOFtmpbpyb9zMNpMpkfTs655/vNyc09ty9cDDC49iuT0is04ksm4q8Y23yBLjOEpTKGaW8EQ/k1xtJrDIUhFcOYSm/+nf30jKqnLw0yX7LSZ9kdZ1LUM+NdZdzlQuN0M+Fwq+zkndfJrBDGLHvQnNixdBVM10m0J2u8lGbRtjYxXMvM3ipMNO0MJ36hz1nWMp9OU46COF9la/WSlPiNUOQCz0KJdBJC8h7mjkIYEL7cYWs2MNaqOOqHhB4/E/nxgw+3Gd4mf6fPUZrCJYuUtr4Ti5RQkqfsbD+S2OmwLlVRlL9ZSuUwtCWkL0/4KlVij98Jfe1Qv9kiu7dM624P63mU0efA8hTuuIjSuCdwnGTzrEa2+I3WvkI+NcfpQYtAsoDxNEb05pqN8zqR6zMC9x1y5/vstorsdk4wX0g/A9UbeuQ41Z0nDnYapDcqpFYOKUWKtLeqtLbvEVJlXG2Rh5MM9cQCnxtpNm+v6KbPaSznecjfY28nGJHVQKcaOJsKUkx0OUrUSQoKol9GEjIcxOvk4ze4UzLTrSDSdQXxLIPYKeLrNhGPa0jVClKjja4dZvQ5cE+HMdZPKOhACFtYjdjxhyysrNtY6p2DNpwbY1gUDV7FzlzWgSWvx1w14ap71GJcOI+8GKuTvJX/oM+2N000MMFX+wZd1ypXNoGsxsi5NcBHd5BHb5Si304u5aGw6KUw7yUnuwgX3ci5IGImQEJZJVRzMZpSA91lPSOH/egaRt6f6NQ/pkPfMDDdmGGq9p4BeZBhZZj+7QEG0kNo6+pOW8f0qZ7pM6PKBnTns2iORxmT/+y9oR7npZ3sww7yJ4mde5n1LyLp+yRyV2LjaBWhuYxwJBCuLCHfxkg9JFm/i5K8Fkl2Y2x9lPFcedVS1EBrWUe8uQDNKsfpdejUOL7chqsqNyUZLmt0bvN8ui3xUFG4yEo8XR1QO0tzJAaJuE1cpCViF8sMpdRSXGUDM7UR1poegk3HM9xtC0LDpmonwYaD+bYNf9tOSNUh1ROaNjzqjr9qxp7XqmzB1HintvxXr+UpxoNWbJ4DzL4sFl+OD75dlXcxe3NY5wpozZtMmiLPuuf1Zr0d63we+2IBu2+fqRUfo+nf6PMWjbwJjjHrD6IPLGII+FX+D4ZAAO2chymfW9XC/2Z6fw+LGBeX0YSm0cRf8A/IZL96CJ80zQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%204.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%204.png\"\n        src=\"/static/155bbdda69c78be5482d1e6c637dc31e/c08bc/200310-5.png\"\n        srcset=\"/static/155bbdda69c78be5482d1e6c637dc31e/5a46d/200310-5.png 300w,\n/static/155bbdda69c78be5482d1e6c637dc31e/c08bc/200310-5.png 579w\"\n        sizes=\"(max-width: 579px) 100vw, 579px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>⇒ 경량성을 강조하던 프레임워크였으나 점차 무거워지기 시작</p>\n<p>⇒ 필요한 라이브러리만 추가하면 되나, 어떤 라이브러리를 추가해야 할지 알기 어렵다…!!</p>\n<p>⇒ Spring-Boot 탄생</p>\n<h1 id=\"spring-boot\" style=\"position:relative;\"><a href=\"#spring-boot\" aria-label=\"spring boot permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Spring Boot</h1>\n<ol>\n<li>\n<p>자주 사용하는 Spring 하위 모듈을 미리 모아놓음</p>\n<p>ex) spring-boot-starter-web을 Gradle 설정만 해주면 관련 라이브러리를 받아옴</p>\n</li>\n<li>\n<p>필요한 설정을 자동으로 수행함</p>\n<p>ex) @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan</p>\n</li>\n<li>Tomcat 내장서버를 포함하고 있다</li>\n</ol>\n<h1 id=\"springmvc\" style=\"position:relative;\"><a href=\"#springmvc\" aria-label=\"springmvc permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SpringMVC</h1>\n<h2 id=\"mvc-pattern-front-controller-pattern\" style=\"position:relative;\"><a href=\"#mvc-pattern-front-controller-pattern\" aria-label=\"mvc pattern front controller pattern permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>MVC pattern, Front-Controller pattern</h2>\n<ul>\n<li>Model: 실질적인 비즈니스 로직 동작, 뷰 템플릿에 렌더링할 데이터 관리</li>\n<li>View: 사용자에게 보여줄 화면 관리</li>\n<li>\n<p>Controller: Model과 View 사이의 상호작용 제어</p>\n<ul>\n<li>Front-Controller: 수많은 요청들이 여러 컨트롤러로 분산되기 이전, 모든 요청을 받아 제어하는 가장 앞에 서 있는 컨트롤러 ⇒ 이것을 이용하는 패턴이 Front-Controller Pattern</li>\n</ul>\n</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 63.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsSAAALEgHS3X78AAAC0ElEQVQ4y22TS28TZxSG80dYlgUbFv0PSKjsukcCVkgsugNVXbAodANIQJBoQZCi0KTGTTAkIQ6+xYkvE3zB9sSZeMZjj8eX8TiBEECClOTheOKEgBjp1XfVM+ec93xDDL71zbcYXZdar4fpup76c91x0doOWsfxzuu9NczeOquOQ7ndoer25N6ap/U3mwzZr1/jvN0kZ9uEqjViZlvUJSqaNx1m9Sp/LimiNFOrBhFD7uk6d5QCw4k0gWWNaLUu+zU0u8lQrtnihWmRqtSYWzYJroSZLvmYVh8xW35GIKUyOr/CSFhjIqFSX7vOq41TZOo+QkaLeM1isW6TsGwMiXjo3fsPpGIaT4N5bj6Ici/yMzemD3Plvx8YiR/jXiCJ/+9hJm//xvjMc1z3BGvtH9Fr50jUHQ8UrzU8qN4Htl5tkFYqRFJlxmMFxhK/czd0ituzpxlL/spsSWdi5gE+3x88Ka1S7oziblwgYQbxy1nIqLIgsH1gptlkueeQlzEthQ6kNfwCnlJU+XOTuETwcFnnbrHCSO4lYaNDXGo7pVmMZHJMazqLVlOgjV3g+48f2dr6n5eNJkHDYHJJxzd2n8Dln4il54jbXSZLKr5CEV9RJVI1BWAzX6t7ZvTTjR+McGdnx2ubrNXglqLwV3gJfzjDP49DBIolxgoqwUqVVKNF0otkt2Z7ae6t94Gftrc9oNbpMifWP82pPJaWGI/m8RfLjOYLTKgru5EMtAfx5oNxH7jtAXeoSP0WLJfhqYucuXSEs1eOiik+0s11rzXig2gORnhw/AaI1/kLVo+r/vOcvHiIX64dZyIzR1Jq2Ad6KUrKiwfAC99L+QuwS9hsEKqs8KycFbjUy2rJusq/iykeJRVGI/P4U0tiSOMrxQbGVFrtL0BL3qIikeTttsghI05mxfkXsvc8mycqDs+kFELSOv39bP98oP7dnOw15P1/BiH9fHcc/5pkAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%205.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%205.png\"\n        src=\"/static/4356e09c1131fad3171dcd525d520bc4/c1b63/200310-6.png\"\n        srcset=\"/static/4356e09c1131fad3171dcd525d520bc4/5a46d/200310-6.png 300w,\n/static/4356e09c1131fad3171dcd525d520bc4/0a47e/200310-6.png 600w,\n/static/4356e09c1131fad3171dcd525d520bc4/c1b63/200310-6.png 1200w,\n/static/4356e09c1131fad3171dcd525d520bc4/c4842/200310-6.png 1634w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"springmvc-1\" style=\"position:relative;\"><a href=\"#springmvc-1\" aria-label=\"springmvc 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SpringMVC</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 63%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsSAAALEgHS3X78AAACA0lEQVQ4y3VT2Y7bMAzM//9aHwoUaB6KOHA369hryzosRZePKanAbgK0AghLNDUckqNT0zTo+x7ee9R1jaq64Ha7wTmLec7IKWJZFgzDgPb+iXWJiMEjxljMOYfXdVq35ybFgMiXV9A3w6gO4/0H7HiBEIIA+7Lv6m9Y03AApJRK4jlnrOuKk5VXBNvBugijFZy60mWNe6vhTIu+q3E+n2HthBQ0Jkq0EUuAmazEMqAn9peqgjEGJycrRNtiEBFdKxBMDSVHCkwHi98fH+i6lhhWsOIMpxuo4UoVfIfrr+hbidsQoYzDab8Uo6ey/XNPPfI+HIBKKerzF9Y8YYkKc3IUY6ktX1TFSJVNMDZgsi+APJQdJIRQbF+Z+tM0n9DDL0zDT+qhwF8iqfQx51Ti3gB3kFfAbduKKSURnISRLdbZk28fSjz2Zcr/A+TzDsiL5WGGC1ZfU9kjtoNhpOluR+IDsLCK8Qh6Lfm5NuSokbygKfs32exJC+A8L0W41toiZtaSpebymf3zPJfeZPouJFKOz3kucWyc+A3QTSO0NkVnQpIpmpghvU0Wo5RlwgzOPiEG8k9Fb+zjRDvDo2Qe/wc9tRKwkETMo0yUMy8UrAmUQYgMNOmM99wSBvvXOgkxYhzHAsgspXyeH48HEvu0hqIXNNlIgGR05v97j7mCruuKse8P3Nfuu8Q8u8wAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%206.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%206.png\"\n        src=\"/static/40d0ef49896dba6168e6ce400903316a/c1b63/200310-7.png\"\n        srcset=\"/static/40d0ef49896dba6168e6ce400903316a/5a46d/200310-7.png 300w,\n/static/40d0ef49896dba6168e6ce400903316a/0a47e/200310-7.png 600w,\n/static/40d0ef49896dba6168e6ce400903316a/c1b63/200310-7.png 1200w,\n/static/40d0ef49896dba6168e6ce400903316a/0c3d0/200310-7.png 1414w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>사용자는 인터넷 브라우저를 통해서 웹사이트에 접속한다.</li>\n<li>웹서버(Nginx)는 WAS(Tomcat, servlet container)에 Reverse Proxy 처리를 수행하고, DispatcherServlet에서는 요청을 받는다. ⇒ FrontController의 역할!</li>\n<li>HandlerMapping의 도움을 받아 어떤 Controller에 위임을 할지 결정한다</li>\n<li>HandlerMapping의 도움으로 선택된 Controller에 요청을 보낸다. Controller는 적절한 응답을 모델을 통해 반환한다.</li>\n<li>ViewResolver의 도움을 받아, View이름에 매핑된 View를 반환한다.</li>\n<li>View는 화면을 템플릿 작업을 통해 반환하고, DispatcherServlet에 의해 사용자에게 반환된다.</li>\n</ol>\n<h2 id=\"springmvc의-한계와-spring-webflux\" style=\"position:relative;\"><a href=\"#springmvc%EC%9D%98-%ED%95%9C%EA%B3%84%EC%99%80-spring-webflux\" aria-label=\"springmvc의 한계와 spring webflux permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SpringMVC의 한계와 Spring WebFlux</h2>\n<p><a href=\"https://alwayspr.tistory.com/44\">Spring WebFlux는 어떻게 적은 리소스로 많은 트래픽을 감당할까?</a></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAABy0lEQVQoz4VSaU/CQBBdaEtbm2JUQAuValvkEEp3t0AwEUwMiWAgHomJ8Y/41fjHfYNLxMRjkpfZ2bnezg7jQtwBD0BDSHnApfShcwwyGA7ZtkRxzDY+6ErK+fhyMnm/mc/fZrPZK+wBOVbAAxCpwAjFra06OmAAGhnlSmV9iZgjmWUly7YdmLuAidw20zSt57quxIVLgehSRbB53u3mJ9OpYZpmzzCMkW3bp7fLpd7t9XQVd5gNBs0wDONisTiCDtDggrU7HY7kcbPV2lOdq0IIBzpAxzMgxrmpmLeAuoor464BPQIkkMLmNKcX4DkbDhN0dXEpMcdzKgKcwE5UItl1+DqwA5zbyItqtZpfKBS4V60S4zGrB8EF6F57nldWnU+QtLfWQiQAFe8rncBHzDVoGg29gBhmICPWDC3LapZKpQS1dtRsPLgKcNIHkTa2QLam4ipgFB9DUCP1fZ8+aUxPvlVoqF+O0d1mvwiabfQhCviYfx0vDPFZRzQe6rQCnvppGuJiXz05v076ZPkNXO0h7Stii9OrKw17aNw/PlKTiOm63ncch6td+mIi5X8MbWzDMbSvUCN7s7g57Fl+vlgwMM1tJf1Z9Cf5AMSEbEkYVXDqAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%207.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%207.png\"\n        src=\"/static/9d30cf9a095e446c9fbb85eb3412d465/c1b63/200310-8.png\"\n        srcset=\"/static/9d30cf9a095e446c9fbb85eb3412d465/5a46d/200310-8.png 300w,\n/static/9d30cf9a095e446c9fbb85eb3412d465/0a47e/200310-8.png 600w,\n/static/9d30cf9a095e446c9fbb85eb3412d465/c1b63/200310-8.png 1200w,\n/static/9d30cf9a095e446c9fbb85eb3412d465/21b4d/200310-8.png 1280w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>Tomcat의 default thread size는 200에 불과하다</li>\n<li>200개가 넘는 요청이 동시에 들어오면 남는 요청은 queue에서 대기해야 한다</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 599px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 55.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAACaUlEQVQoz22Sa1PaQBSG/eX1i3a8jSI3EYjcCQmEIAiK1ioEQiQRRKFeqtbeZqzT//D0iM447fTDu+/u7Nln352zM7lUi1KqQzFlUUxaLy5Sgjts+sypx/zbxAJV4sEayY1djHR3WvN8bqp0Bz1hsV1ymHmGVJI2ZqpHJe1QlrmR6BBbrRBa1IisGISXikRXSiRWyyTXa5jPNVudNyW6GEqHRvGEmYIAV5UWs4EGs1K8oLTx6yNCpTFB/ZyANiJsjPGlT+SgTVlzydtXlPq3GO6d+N3Us61PmCUBqok2a3kXf33A5sGA0K7HRnNAsOGS6FyjWNcEamMW9CEL0TaJjEX9/pH9r09UL79Svf7GwfffmJNvmOX+KzDnEjmckHFu2NgTeLWLr2KxZU2ItyRdZcSKAOcyLr5Um52bn+ze/aLgXKC5E5oPTxijh7+B0eNLCqf35OQpkX1JJ7DC4IF070YuuGBZG/BegIG0xc7VD3ZvH9m7f2JPwE1JbJx9eQP6BBjePyd2dEb0cEio4RBuurIeEflwxvr2OSvakPmshy92RKLmoVT7xE2HeOVkuo6ZLmZRuqxutVhTPaIfx4QbXXmywOq2zHtsNGxJ6xHcmUwTzkvC9WQb1bshstclWG+L2ygfPdLSqLIhTdGlwK9YzKkui/qABe1UGiCuv7rmvaggyg9Y2jwk0xuTtYdke+ekrFNyzoj48Rm6Zr/8w3LcYjH0gXcCno3/I+VN86kTliOHbEmjcs41oVqHSLOP2v8sPkTLd5kpyVAv9KnkeqgZm0K291+pWXu6X8zZ6Pnei9RnOVMvyH6j4vEHb+anXCwEsaQAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%208.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%208.png\"\n        src=\"/static/9224b0787eaa8cd054e27203b426e549/43142/200310-9.png\"\n        srcset=\"/static/9224b0787eaa8cd054e27203b426e549/5a46d/200310-9.png 300w,\n/static/9224b0787eaa8cd054e27203b426e549/43142/200310-9.png 599w\"\n        sizes=\"(max-width: 599px) 100vw, 599px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>\n<p>여기 겹쳐있는 스레드 들이 스레드 풀</p>\n<ul>\n<li>스레드를 만들거나 지우는 일은 cost가 많이 드는 일이다</li>\n<li>스레드도 결국 객체, 빈 객체를 잔뜩 만들어두고 필요한 요청에 맞게 실행할 메소드, 전달받은 파라미터들을 스레드 메모리 공간에 담는 것이 스레드를 할당하는 것이다</li>\n</ul>\n</li>\n<li>스레드들은 힙에 있는 Controller Singleton에 제각각 요청을 날린다</li>\n<li>사실 request들을 처리하는 일에서 가장 많은 시간을 잡아먹는 일은 ‘기다리기’이다</li>\n<li>스레드가 Singleton에 요청을 날리고, 적절한 대답을 받기까지 기다리는 동안 요청들은 큐에서 대기중인 것이다!</li>\n</ul>\n<p>→ 사실 이런 스레드풀의 개념은 앞단(클라이언트 → 서버) 간의 통신 뿐만 아니라, 뒷단(서버→DB)에도 있다 그것이 DB connection pool(DBCP)</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 683px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 55.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAAB7ElEQVQoz41STWsTURTNj3MriNJFNwWXIkoXXbgvVNz4CVrEnyDFFjeiLmyLrdEEYkzTfEzTaZKZl2Ty5vt7Jsf7Xk2bNBS8cOByufe8c+59hclkgizLJUQukBP+NyZXegvXNSb0QEOzUOuZEg3dxsAKYHkRoiSFF8YIouRCxBQFy/Hx/lMR219LYNzFwAkxsAOUOwZ004cfpRK6GWC3ruOPOpJQhzYsP5pTKQm55WF57TVWHm2iPzTJLvBTGcEJkwXVotYkpUGSQ9U5GicaVM2YI5WWjxQN5foZDO5INcrQRZIkVO+jeaqjxzjqNBxHsVTuxxnKR6fY+lLC54MavOBSKRGeM/fIkghOO2oxByntab/UxH65iVKtg91fx4iIsMVshGmO9TcfcOPuY9y89xR71Cciy3MUplJdsuOGKSJqrpxxWcvz84vLn0DN0g0dKKORjbc7uP3gOZZWX+Kg0r4kFIm4VlsjW10DHWbie0OH6ccLO9Tpyr/VsczXN7dx6/4z3Hn4AocVZZ5QJII0zTIwuqxquCi2R+hzHx7tVKA39lDtmhfkT959lHaXVl+hWD3552jG8mwEcQpGan4Q6bc6w94xwyHlLc1EtcOgkAuNe7C9UCJOs9mjYOFzXhddw0FNHUIbu7jaNp37C00SOY6h/i4jAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%209.png\"\n        title=\"200524%20Spring%20Framework%206595b24c0efd4514a9f11c421d559691/Untitled%209.png\"\n        src=\"/static/bc140704538704f3811e8cd278624256/bca35/200310-10.png\"\n        srcset=\"/static/bc140704538704f3811e8cd278624256/5a46d/200310-10.png 300w,\n/static/bc140704538704f3811e8cd278624256/0a47e/200310-10.png 600w,\n/static/bc140704538704f3811e8cd278624256/bca35/200310-10.png 683w\"\n        sizes=\"(max-width: 683px) 100vw, 683px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>Spring WebFlux는 Event Loop를 통해 다수의 요청을 처리한다</li>\n<li>worker thread default size는 서버의 core 개수와 같음</li>\n<li>core가 4개라면 thread도 4개뿐</li>\n<li>그럼에도 불구하고 더 많은 request를 효율적으로 처리할 수 있다</li>\n<li>Spring MVC와 Spring Web Flux의 효율성 차이는 위에서 말한 ‘기다리기’를 줄이는 것이 핵심</li>\n<li>Event Loop에는 수많은 ‘일감’들이 돌고있다</li>\n<li>Worker thread는 이 ‘일감’들을 메인 로직에 던져주고 알아서 처리된 일감들을 Event Loop로 다시 넣게끔 하거나, 처리된 일감을 응답으로 외부에 송출하는 등의 일을 한다</li>\n<li>이 Event Loop는 돌고있는 일감의 개수와 관계없이 계에에에속 돌고 있다 → size가 0인 루프다</li>\n</ul>","frontmatter":{"title":"","date":null,"lang":null}}},{"node":{"id":"455113c2-a875-5b2f-aeaa-c866a0a1ff2c","excerpt":"200525 TCP/IP Tags: Network 용어 Protocol 서로 다른 기기/사용자 간 정보를 주고받을 때, 그 정보의 형식, 순서, 에러 검출 방법 등을 결정하는 규칙 ex) HTTP, FTP, TCP 통신규약 Hosts 통신장비 ex…","html":"<h1 id=\"200525-tcpip\" style=\"position:relative;\"><a href=\"#200525-tcpip\" aria-label=\"200525 tcpip permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>200525 TCP/IP</h1>\n<p>Tags: Network</p>\n<h1 id=\"용어\" style=\"position:relative;\"><a href=\"#%EC%9A%A9%EC%96%B4\" aria-label=\"용어 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>용어</h1>\n<h2 id=\"protocol\" style=\"position:relative;\"><a href=\"#protocol\" aria-label=\"protocol permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Protocol</h2>\n<ul>\n<li>\n<p>서로 다른 기기/사용자 간 정보를 주고받을 때, 그 정보의 형식, 순서, 에러 검출 방법 등을 결정하는 규칙</p>\n<p>ex) HTTP, FTP, <strong>TCP</strong></p>\n</li>\n<li>통신규약</li>\n</ul>\n<h2 id=\"hosts\" style=\"position:relative;\"><a href=\"#hosts\" aria-label=\"hosts permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Hosts</h2>\n<ul>\n<li>\n<p>통신장비</p>\n<p>ex) 공유기에 연결된 내 노트북, 핸드폰, 데스크탑 모두 다 Hosts, 공유기도 Hosts</p>\n</li>\n</ul>\n<h2 id=\"packet\" style=\"position:relative;\"><a href=\"#packet\" aria-label=\"packet permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Packet</h2>\n<ul>\n<li>통신할 때 주고 받는 소포(?) 같은 것</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 28.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABPUlEQVQY04WR2XKCQBBF+f9/Sp5MCk20CjEsCrKojLKFJIBA1JN2ec/DqXt75nZXT41mWRZqn9G0PX0/MAwn+kG0729c/el84fwPl8sdLd7G7FRCnqeUZUZRtezzmqyoSPOKoqw4//ZwGm56OV0Z7ir1+UHXdbeFtJ2zR60y3FWOaads1x8U0Ri1fuNzMyEMXMbLkrdlzmSZoduKFzMWnzJxU3Tpn3kZibyyKEu0YrGgsC22jk1gLgjtKVlsELljsmiKtwp5ev1iNMsxogMjw+P53eJl7svgNboVYcYpXz8N7bFD2yQ68U5nIyg1xk8d7DxiGs5xigjDMwjFq70r2GyTBV4wlY0sEnVHHVy+61r+4YhW1z5NEwoBtdBKfaxXdK1P13ikB5PPypHwmnvWp22vWf+BJ+eB3Lccu54/uVy+ZvtZ6kYAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled.png\"\n        title=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled.png\"\n        src=\"/static/e4213a6a6188d6b44fb58f5e2c780af3/c1b63/Untitled.png\"\n        srcset=\"/static/e4213a6a6188d6b44fb58f5e2c780af3/5a46d/Untitled.png 300w,\n/static/e4213a6a6188d6b44fb58f5e2c780af3/0a47e/Untitled.png 600w,\n/static/e4213a6a6188d6b44fb58f5e2c780af3/c1b63/Untitled.png 1200w,\n/static/e4213a6a6188d6b44fb58f5e2c780af3/d61c2/Untitled.png 1800w,\n/static/e4213a6a6188d6b44fb58f5e2c780af3/81ebd/Untitled.png 1868w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h1 id=\"tcpip\" style=\"position:relative;\"><a href=\"#tcpip\" aria-label=\"tcpip permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>TCP/IP</h1>\n<ul>\n<li>Transmission Control Protocol/Internet Protocol</li>\n<li>가장 널리 쓰이는 프로토콜</li>\n<li>4계층으로 이루어짐</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1012px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 68.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsSAAALEgHS3X78AAAD50lEQVQ4yzWSaUzUBxDF/036oR/6oaZHelkgQVOpBSOngRW5itXWKoq1Eq0IFgQpRxB6pNVauaq1NeDC7oKwu9wgKLAiAlvcBQQLAnJT7gUUWHCxFa/Kr39IOsnLvHnzJplJRlh8uEh/3wBjY+NMGCa4P29iwbTAnHGO5d7S8yWWw2Qy0dPdy+DgEH19/SszszOzK97lmTnjPI8fP0GYMU6jysnkalUFI4Yh6pt1FBTnkZ4pZ3B4gP/DOD8resqpqrlKeeUVrlVruH2nhTp9LercLApL8pidn0b46/Yk6h/qKIjXkxlbS3pUNfnxOorPNFDyWwMZ0bVifYM/q3tRRNVw8RutiBpU3+vIFLks6hrpx6tRRIvaT1qEG6VdHFyfwiGbFHxXn8PPUsoxNwXHXBWEuSvYb5lMiIuc/HNa/FfLOWIp50uzZALM5Rw2kxForiDQQiH2ZByzVSDkFP/Ba2sPsMY+iBde38mLb/my3iWUjVvCsfeI5KV39vKebQB5KbX8uDWfEzvyOPqhjAh7Jad8ClaQ6FdEhJ2SGDclwmV9LxuCVbhE5mLhJ2PdETWuIneNzME9Kpt1ASqco3MoSNUTsiaTMBslwVYKwjeoid2cw3HnbGJcsgmzVhHtokLQDj/gQOVdAqsm2VF6l50aEwFVUwRdn+TodQOflRkJ0BopVjYQZislwkVGiMN5vnZKI8wxVUTaCg+1kxLjLUNon2oiOPdzjqr9+K46gBP6IIKVXxCUuY9DUl++rfEnsS6WypZcIuTeRGd8ysnS3cRp9hKe8jGhv3vzVYKnqO0iqdwfYdRYh/SaExc0Ego7tpLb+hFJBU6cK9nE2aJNpGmdudJxkFsDSrL0m8m64Ulp1zZKu7dzvkxCcoWEX4udyW3xpKJ7P8K/z+oZH/FioH8bPN/Lo799qNdtoU00dLSJeq8Hz56Eik+cjWHMi9Hh7Tx/uoelZ3touukmejxX/A/uf8LTR4cRHs5o6apwpL1cwuwtT1rLnNHlO1KX40CjuGFjsR1D+n1M9lxkul7C3XpPJnTumMRL7tV7MCnyKb0HC63uGBp8EBaHa2hLsKY53o4ZpYS+8440nt5IY9wybGlPsmFUvZup1gwMRY4YLrkyr3GjPcOJBqk9nVmbuJnqQKvclpnKnQgPNJfRv/syTWvfYHTdmxit36bSYhUV5qu4ZPYKhvdfZURiz7guhdFCK0YKNmKsELfOs6FF/gG9amt6VNYMqK24d9UL4Z++HnrjTtL/SxzjZ+OZOBNPd8JpOhN+pivxNKOJpzBILzAz2IyxM43ZDgUTrWkilzPXpVjJxk4x35Ex2a7kP0pdC9IgaCO4AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%201.png\"\n        title=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%201.png\"\n        src=\"/static/277be1d5b3ca3c666196e7d50be6a81f/ad997/Untitled%201.png\"\n        srcset=\"/static/277be1d5b3ca3c666196e7d50be6a81f/5a46d/Untitled%201.png 300w,\n/static/277be1d5b3ca3c666196e7d50be6a81f/0a47e/Untitled%201.png 600w,\n/static/277be1d5b3ca3c666196e7d50be6a81f/ad997/Untitled%201.png 1012w\"\n        sizes=\"(max-width: 1012px) 100vw, 1012px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"encapsulation\" style=\"position:relative;\"><a href=\"#encapsulation\" aria-label=\"encapsulation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Encapsulation</h3>\n<ul>\n<li>캡슐화 - 각 단계에서 담아야 할 새로운 정보들을 기존 패킷에 추가하고(감싸고) 하위 계층으로 넘겨줌</li>\n<li>Decapsulation - 각 단계에서 필요한 정보만 추출하고 패킷에서 해당 정보를 삭제한 다음(벗기고) 상위 계층으로 넘겨줌</li>\n<li>각 계층은 다른 계층에서 일어나는 일을 신경쓰지 않아도 되므로 개발에 필요한 로드 감소</li>\n</ul>\n<h3 id=\"application-layer\" style=\"position:relative;\"><a href=\"#application-layer\" aria-label=\"application layer permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Application Layer</h3>\n<ul>\n<li>웹 브라우저 - 서버 HTTP</li>\n<li>파일 전송 FTP</li>\n<li>메일 수신/발신 SMTP, IMAP, POP</li>\n<li>도메인 주소 해석 DNS</li>\n<li>암호화된 원격 Shell 접속 SSH</li>\n</ul>\n<h3 id=\"transfer-layer\" style=\"position:relative;\"><a href=\"#transfer-layer\" aria-label=\"transfer layer permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Transfer Layer</h3>\n<ul>\n<li>두 호스트 간의 통신 방식을 정의</li>\n<li>TCP/UDP가 여기에 속함</li>\n<li>TCP : initialization이 필요하나 신뢰성 있는 전송</li>\n<li>UDP : 간단하지만 패킷 손상/손실 가능성</li>\n<li>TCP와 UDP의 포트는 프로세스에 할당됨</li>\n</ul>\n<h3 id=\"internet-layer\" style=\"position:relative;\"><a href=\"#internet-layer\" aria-label=\"internet layer permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Internet Layer</h3>\n<ul>\n<li>패킷을 어떻게 보낼 것인지 결정</li>\n<li>IPv4, IPv6</li>\n<li>라우터는 IP를 기반으로 패킷을 라우팅한다</li>\n</ul>\n<h3 id=\"network-access-layer\" style=\"position:relative;\"><a href=\"#network-access-layer\" aria-label=\"network access layer permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Network Access Layer</h3>\n<ul>\n<li>네트워크 상의 기기들을 위한 규약</li>\n<li>Ethernet</li>\n<li>MAC 주소를 할당</li>\n</ul>\n<h1 id=\"로컬-네트워크에서-일어나는-일\" style=\"position:relative;\"><a href=\"#%EB%A1%9C%EC%BB%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%97%90%EC%84%9C-%EC%9D%BC%EC%96%B4%EB%82%98%EB%8A%94-%EC%9D%BC\" aria-label=\"로컬 네트워크에서 일어나는 일 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>로컬 네트워크에서 일어나는 일</h1>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAABVElEQVQoz52RSa6CQBRFa48uxIHrYAMuwakTDQOjGLuoUw0BDfZ9EyEgCvfnvgTC78jPf8kJVNWtW69Rx+MR/+V0OuF6veJ8Pqd7Cn+MOI6/EUUR9vs97vd7qlM/CRMY7/cbnufh+XwiCIIUrpndZrPBcDiEbdv5howwDOUiM8kLaogY5gnZE9M04TjOrxo+xuxSQ9af5Xa7SYnL5RKj0QiVSgX1el3ELPHxeMi567pSOs0KhYI8LoaXywUJnBa/zKhcLqNUKqFYLELTNDnb7XYy2cPhIMNg/3zfR6PRkH0xfL1eSGDPWAIPx+MxarUaqtWqZGgYhmiS6RL+fx2U4itZttst1us15vM5VqsVptOp9LHX68l3NptJmcSyLLkzmUxkf7FYQHGRR2LIfrbbbXQ6nZRmsyn7rKLVakHXdaisIA9m2O/3PzEYDKQVbAnNu90uPgDfnC2vPwbTNQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%202.png\"\n        title=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%202.png\"\n        src=\"/static/421ea9cdc6ad06e4258e5a1007cb8e38/c1b63/Untitled%202.png\"\n        srcset=\"/static/421ea9cdc6ad06e4258e5a1007cb8e38/5a46d/Untitled%202.png 300w,\n/static/421ea9cdc6ad06e4258e5a1007cb8e38/0a47e/Untitled%202.png 600w,\n/static/421ea9cdc6ad06e4258e5a1007cb8e38/c1b63/Untitled%202.png 1200w,\n/static/421ea9cdc6ad06e4258e5a1007cb8e38/d61c2/Untitled%202.png 1800w,\n/static/421ea9cdc6ad06e4258e5a1007cb8e38/97a96/Untitled%202.png 2400w,\n/static/421ea9cdc6ad06e4258e5a1007cb8e38/42267/Untitled%202.png 2670w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3 id=\"공유기router\" style=\"position:relative;\"><a href=\"#%EA%B3%B5%EC%9C%A0%EA%B8%B0router\" aria-label=\"공유기router permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>공유기(Router)</h3>\n<ul>\n<li>우리 집에 인터넷에 연결하고 싶은 Hosts가 3개가 있음</li>\n<li>하나의 Public IP를 할당받아 인터넷과 연결</li>\n<li>내부의 Hosts들이 인터넷과 연결할 수 있도록 도와주는 놈!</li>\n</ul>\n<h3 id=\"59666238public-ip\" style=\"position:relative;\"><a href=\"#59666238public-ip\" aria-label=\"59666238public ip permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>59.6.66.238(Public IP)</h3>\n<ul>\n<li>WAN(Wide Area Network)과 이어짐</li>\n</ul>\n<h2 id=\"새로운-host가-공유기와-연결하는-과정\" style=\"position:relative;\"><a href=\"#%EC%83%88%EB%A1%9C%EC%9A%B4-host%EA%B0%80-%EA%B3%B5%EC%9C%A0%EA%B8%B0%EC%99%80-%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94-%EA%B3%BC%EC%A0%95\" aria-label=\"새로운 host가 공유기와 연결하는 과정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>새로운 Host가 공유기와 연결하는 과정</h2>\n<ul>\n<li>모든 통신장비 고유의 번호인 MAC 주소로 소통!</li>\n<li>그리고 이에 관련된 가장 널리 쓰이는 규약이 DHCP(Dynamic Host Configuration Protocol)</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 23.666666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsSAAALEgHS3X78AAAArElEQVQY012QCQ6EIAxFvf9FQaUsAgpq0vFXa8yYvPzWlm6DMYZLKbxtG9daRdd1FW2tce9dfM2BDXIuF1n+fb/BWsspJSYi9t6/hBA4xsTLsoiNuHNO8Jd/x6PEARpAB0z4LUbkJRHgEZqFECWHJE7ycN93mR5gk9Y6H8dxF8Q6GP8fPQHiKKwaL9IDtlD7PM+7INaYponneRa14/j6uiZOAzQfzXDL+txU/R9lkn6MtaO1lwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%203.png\"\n        title=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%203.png\"\n        src=\"/static/0422728c5cf3044cf814b8283971742e/c1b63/Untitled%203.png\"\n        srcset=\"/static/0422728c5cf3044cf814b8283971742e/5a46d/Untitled%203.png 300w,\n/static/0422728c5cf3044cf814b8283971742e/0a47e/Untitled%203.png 600w,\n/static/0422728c5cf3044cf814b8283971742e/c1b63/Untitled%203.png 1200w,\n/static/0422728c5cf3044cf814b8283971742e/d61c2/Untitled%203.png 1800w,\n/static/0422728c5cf3044cf814b8283971742e/97a96/Untitled%203.png 2400w,\n/static/0422728c5cf3044cf814b8283971742e/d5ef8/Untitled%203.png 2462w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>이 때, 공유기는 Hosts 하나에 고정된 IP를 할당할수도</p>\n<p>→ Dynamic IP address</p>\n<p>매번 그때그때 새로운 IP를 할당할수도 있다</p>\n<p>→ Static IP address</p>\n<h2 id=\"hosts가-client로써-인터넷과-소통하는-과정\" style=\"position:relative;\"><a href=\"#hosts%EA%B0%80-client%EB%A1%9C%EC%8D%A8-%EC%9D%B8%ED%84%B0%EB%84%B7%EA%B3%BC-%EC%86%8C%ED%86%B5%ED%95%98%EB%8A%94-%EA%B3%BC%EC%A0%95\" aria-label=\"hosts가 client로써 인터넷과 소통하는 과정 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Hosts가 Client로써 인터넷과 소통하는 과정</h2>\n<p>private IP와 public IP를 전환해주는 과정이 NAT(network address translation)</p>\n<ol>\n<li>Hosts가 공유기에 192.168.0.4:80를 통해 요청을 보냄</li>\n<li>공유기가 Public IP를 통해 Server로 요청을 대신 보냄</li>\n<li>Server는 Public IP인 59.6.66.238:80으로 응답함</li>\n<li>공유기는 이를 192.168.0.4:80으로 전환하여 Hosts에게 응답함</li>\n</ol>\n<h2 id=\"hosts가-server가-되려면\" style=\"position:relative;\"><a href=\"#hosts%EA%B0%80-server%EA%B0%80-%EB%90%98%EB%A0%A4%EB%A9%B4\" aria-label=\"hosts가 server가 되려면 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Hosts가 Server가 되려면?</h2>\n<ul>\n<li>외부에서는 공유기의 public IP만 알고 있으므로, 특정 Hosts를 찾아갈수가 없다!</li>\n<li>공유기 차원에서 하나의 포트를 정해서 “이 포트로 들어오는 요청들은 이 Hosts의 이 포트로 연결해주면 되겠다!” 가 필요함</li>\n</ul>\n<p>→ 포트포워딩!</p>\n<h1 id=\"ipv4\" style=\"position:relative;\"><a href=\"#ipv4\" aria-label=\"ipv4 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>IPv4</h1>\n<ul>\n<li>IPv4 : IP주소를 32비트로 나타냄 → 약 42억개</li>\n<li>IPv6 : IP주소를 128비트로 나타냄 → 지구상의 모래알보다 많다</li>\n</ul>\n<h3 id=\"ip-클래스\" style=\"position:relative;\"><a href=\"#ip-%ED%81%B4%EB%9E%98%EC%8A%A4\" aria-label=\"ip 클래스 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>IP 클래스</h3>\n<ul>\n<li>\n<p>IP의 앞부분은 네트워크 영역(서브넷, 지역), 뒷부분은 호스트 주소(상세 주소)를 가리킨다!</p>\n<p>ex) 카이스트의 네트워크는 143.248.35.xx 다!</p>\n</li>\n<li>네트워크 영역에 몇 비트를 할당할지가 클래스!</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 828px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsSAAALEgHS3X78AAABt0lEQVQozzVS2XarMBDj//+tTSALJCELAQzG7AGy9EHVTO998MFmpLGksTfNC8bHDGMsbFXj8VgwjBOsrfXcdgNrJeq601rlGpjCKmYYZ7i6RWmdYqZpgVc3PUEd/GCP3f7IJh0JDpttpOd7WmjteLrCNQPic6K10rJR1eJwvGC13uDrO2DzHt4pvuB7FSBJDXKqTO45rreM+wq3JEew2SM6xGxsdO8Hu7+12en/a5JRQIWMXFHuVa6m3AJ9P2BenpgZwYMRyLfreoJKFFxN21G940UFsixHWVo0TacY4U3TDInPc/8ajuMD7/cHr9cbCwGyH4YRBYlCbtlQsNLcGIOKzaVZPwz4fH6U93y+4J3PN7Vwo/QsL5BmhpZTWjcIoxjBNmRmIULa82l5HWyx9rfY7iK1fDhdNA6xLpF5rq55W8WbOT3Tc5qjWni937TUqjrn/tRYW/HMCLiEJ6rFhSgUR88XFQrIFFSWlkiSiiSCaF8ysXwOKfOS3CTrNM1xv6e6JCbJtOali2a4KMeLz1edXsCprdY+5edq4cZpiyWxK7XoeFac2P1vOYxOfE4XRlUqpygdfgHdD5j911I9XQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%204.png\"\n        title=\"200525%20TCP%20IP%20140a7ab664b342a8b9459cad5d38fe89/Untitled%204.png\"\n        src=\"/static/d60a8c55c3d9661744a8a6c6a0ee1f26/8efc2/Untitled%204.png\"\n        srcset=\"/static/d60a8c55c3d9661744a8a6c6a0ee1f26/5a46d/Untitled%204.png 300w,\n/static/d60a8c55c3d9661744a8a6c6a0ee1f26/0a47e/Untitled%204.png 600w,\n/static/d60a8c55c3d9661744a8a6c6a0ee1f26/8efc2/Untitled%204.png 828w\"\n        sizes=\"(max-width: 828px) 100vw, 828px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>클래스 C는 네트워크 하나에 ip를 254개 밖에 못받고…클래스 B는 충분하긴 하지만 16000개만 받으면 동남</li>\n</ul>\n<h3 id=\"cidrclassless-inter-domain-routing\" style=\"position:relative;\"><a href=\"#cidrclassless-inter-domain-routing\" aria-label=\"cidrclassless inter domain routing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CIDR(Classless Inter-Domain Routing)</h3>\n<ul>\n<li>네트워크 영역으로 사용될 비트의 수를 명시</li>\n<li>143.248.35.11/24</li>\n</ul>\n<p>→ 143.248.35.11 = 01001111 11110100 00100011 00001011</p>\n<p>→ 255.255.255.0 = 11111111 11111111 11111111 00000000 ← <strong>서브넷 마스크!</strong></p>\n<p>⇒ 앞에 24비트가 네트워크 영역이라는 뜻!</p>","frontmatter":{"title":"","date":null,"lang":null}}},{"node":{"id":"038a65ad-3e6b-5f84-a7c8-8ec1fa5230ee","excerpt":"본 이력서는 이 링크에서 더 잘 읽힙니다. 윤준성 | Junsung Yoon Node.js 기반의 백엔드 개발에 능숙하며 프론트, DevOps 업무 경험이 있습니다. 데브시스터즈에서 2년 이상 근무하며 다양하고 새로운 프로젝트들을 킥오프하고 리드해본 경험이 있습니다. 현재 현역 IT…","html":"<blockquote>\n<p>본 이력서는 <a href=\"https://www.notion.so/Junsung-Yoon-fb07f70750b447818af8236ddfc8cfb9\">이 링크</a>에서 더 잘 읽힙니다.</p>\n</blockquote>\n<h1 id=\"윤준성--junsung-yoon\" style=\"position:relative;\"><a href=\"#%EC%9C%A4%EC%A4%80%EC%84%B1--junsung-yoon\" aria-label=\"윤준성  junsung yoon permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>윤준성 | Junsung Yoon</h1>\n<p>Node.js 기반의 <strong>백엔드 개발</strong>에 능숙하며 프론트, DevOps 업무 경험이 있습니다.</p>\n<p>데브시스터즈에서 2년 이상 근무하며 다양하고 새로운 프로젝트들을 킥오프하고 리드해본 경험이 있습니다.</p>\n<p>현재 <strong>현역 IT 산업기능요원</strong>으로 복무중입니다.</p>\n<hr>\n<p>☎️ | +82 10-6641-1621</p>\n<p>✉️ | yoonjs0510@kaist.ac.kr</p>\n<p>💻 | <a href=\"https://github.com/junbyeol\">https://github.com/junbyeol</a></p>\n<p>📚 | <a href=\"https://junbyeol.github.io\">https://junbyeol.github.io</a></p>\n<p>Last Updated: <code class=\"language-text\">2023.02.06</code></p>\n<hr>\n<h1 id=\"skills\" style=\"position:relative;\"><a href=\"#skills\" aria-label=\"skills permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SKILLS</h1>\n<p>⭐️⭐️ Production에 당장 능숙하게 사용가능한 기술\n⭐️ Production에 활용할 수 있거나, 한 적 있는 기술</p>\n<h3 id=\"backend\" style=\"position:relative;\"><a href=\"#backend\" aria-label=\"backend permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Backend</h3>\n<ul>\n<li>Node.js ⭐️⭐️</li>\n<li>Typescript ⭐️⭐️</li>\n<li>Fastify ⭐️⭐️</li>\n<li>Java ⭐️</li>\n<li>Kotlin ⭐️</li>\n<li>Spring Framework ⭐️</li>\n</ul>\n<h3 id=\"database\" style=\"position:relative;\"><a href=\"#database\" aria-label=\"database permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Database</h3>\n<ul>\n<li>MySQL ⭐️⭐️</li>\n<li>Redis ⭐️</li>\n</ul>\n<h3 id=\"webhttp\" style=\"position:relative;\"><a href=\"#webhttp\" aria-label=\"webhttp permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Web/HTTP</h3>\n<ul>\n<li>React ⭐️⭐️</li>\n<li>GraphQL ⭐️⭐️</li>\n<li>websocket ⭐️⭐️</li>\n</ul>\n<h3 id=\"devops\" style=\"position:relative;\"><a href=\"#devops\" aria-label=\"devops permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DevOps</h3>\n<ul>\n<li>Docker ⭐️⭐️</li>\n<li>Terraform ⭐️</li>\n<li>kubernetes ⭐️</li>\n<li>\n<p>AWS</p>\n<ul>\n<li>s3, ecr, rds, medialive 등 다수</li>\n</ul>\n</li>\n</ul>\n<hr>\n<h1 id=\"experiences\" style=\"position:relative;\"><a href=\"#experiences\" aria-label=\"experiences permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>EXPERIENCES</h1>\n<h2 id=\"202007\" style=\"position:relative;\"><a href=\"#202007\" aria-label=\"202007 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2020.07</h2>\n<p>~현재</p>\n<p><code class=\"language-text\">1년 10개월 이상</code></p>\n<h2 id=\"데브시스터즈\" style=\"position:relative;\"><a href=\"#%EB%8D%B0%EB%B8%8C%EC%8B%9C%EC%8A%A4%ED%84%B0%EC%A6%88\" aria-label=\"데브시스터즈 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>데브시스터즈</h2>\n<p>웹서비스셀 백엔드 개발자</p>\n<p><code class=\"language-text\">NodeJS</code> <code class=\"language-text\">Typescript</code> <code class=\"language-text\">GraphQL</code> <code class=\"language-text\">MySQL</code> <code class=\"language-text\">Docker</code> <code class=\"language-text\">AWS</code> <code class=\"language-text\">Terraform</code> <code class=\"language-text\">k8s</code> <code class=\"language-text\">websocket</code> <code class=\"language-text\">Redis</code></p>\n<ul>\n<li>쿠키런 IP를 활용한 게임회사</li>\n<li>팀 전체 4~10명, 개발인원 3~5명</li>\n<li>게임 소개/이벤트 진행용 사이트들의 GraphQL 서버 로직 구현 및 배포</li>\n<li>전사 회의용 스트리밍 및 슈퍼챗 서버 구현 및 배포</li>\n<li>Document성 사이트들의 CMS 구축 및 배포 자동화</li>\n<li>채용 설명회 참여, 기술블로그 글 작성, 사내 세미나 발표 경험 등</li>\n</ul>\n<hr>\n<h2 id=\"202001\" style=\"position:relative;\"><a href=\"#202001\" aria-label=\"202001 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2020.01</h2>\n<p>~2020.06</p>\n<p><code class=\"language-text\">6개월</code></p>\n<h2 id=\"셀렉트스타\" style=\"position:relative;\"><a href=\"#%EC%85%80%EB%A0%89%ED%8A%B8%EC%8A%A4%ED%83%80\" aria-label=\"셀렉트스타 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>셀렉트스타</h2>\n<p>개발팀 백엔드 개발자/백오피스 개발자</p>\n<p><code class=\"language-text\">Kotlin</code> <code class=\"language-text\">Spring Framework</code> <code class=\"language-text\">MySQL</code> <code class=\"language-text\">React</code> <code class=\"language-text\">Nginx</code> <code class=\"language-text\">Jenkins</code></p>\n<ul>\n<li>크라우드소싱 플랫폼 개발 스타트업</li>\n<li>회사 전체 20~40명, 개발인원 5~6명</li>\n<li>크라우드소싱 플랫폼 캐시미션의 RESTful 서버 로직 구현</li>\n<li>캐시미션 어드민 사이트의 프론트/백엔드 구현</li>\n<li>근태관리용 Slack 챗봇 개발</li>\n</ul>\n<hr>\n<h1 id=\"projects\" style=\"position:relative;\"><a href=\"#projects\" aria-label=\"projects permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>PROJECTS</h1>\n<h2 id=\"202110\" style=\"position:relative;\"><a href=\"#202110\" aria-label=\"202110 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2021.10</h2>\n<p>~ 현재</p>\n<p><code class=\"language-text\">데브시스터즈</code></p>\n<h2 id=\"사내-스트리밍-및-슈퍼챗-서버\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EB%82%B4-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D-%EB%B0%8F-%EC%8A%88%ED%8D%BC%EC%B1%97-%EC%84%9C%EB%B2%84\" aria-label=\"사내 스트리밍 및 슈퍼챗 서버 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>사내 스트리밍 및 슈퍼챗 서버</h2>\n<ul>\n<li>\n<p>전사 회의 시에 사용하는 스트리밍 시스템, <strong>데브라이브</strong>를 개발</p>\n<ul>\n<li>스튜디오에서 OBS(Open Broadcast Software)를 이용,  AWS Medialive로 HLS 스트림 생성 후, 뷰어 페이지에서 시청할 수 있도록 세팅</li>\n<li>슬랙을 통해 질문 수집, 수집된 질문은 유튜브 슈퍼챗 처럼, 스트리밍 되는 화면 위에 노출됨</li>\n<li>이 사항들(스트림 생성, 질문 관리)을 방송 스탭들이 쉽게 관리할 수 있도록 어드민 페이지 제작</li>\n</ul>\n</li>\n</ul>\n<p><code class=\"language-text\">NodeJS</code> <code class=\"language-text\">Typescript</code> <code class=\"language-text\">websocket</code> <code class=\"language-text\">MySQL</code> <code class=\"language-text\">Docker</code> <code class=\"language-text\">Terraform</code> <code class=\"language-text\">k8s</code> <code class=\"language-text\">AWS</code> <code class=\"language-text\">Redis</code></p>\n<ul>\n<li>키워드: <code class=\"language-text\">websocket</code>, <code class=\"language-text\">Redis</code>, <code class=\"language-text\">AWS</code></li>\n<li>기여 범위: 서버 전체 및 인프라 유지보수, 리드 포지션으로 실시간 모니터링 주도</li>\n</ul>\n<h2 id=\"202102\" style=\"position:relative;\"><a href=\"#202102\" aria-label=\"202102 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2021.02</h2>\n<p>~ 현재</p>\n<p><code class=\"language-text\">데브시스터즈</code></p>\n<h2 id=\"웹서비스셀-cmscontent-management-system\" style=\"position:relative;\"><a href=\"#%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4%EC%85%80-cmscontent-management-system\" aria-label=\"웹서비스셀 cmscontent management system permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>웹서비스셀 CMS(Content Management System)</h2>\n<p><code class=\"language-text\">NodeJS</code> <code class=\"language-text\">Javascript</code> <code class=\"language-text\">GraphQL</code> <code class=\"language-text\">MySQL</code> <code class=\"language-text\">Docker</code> <code class=\"language-text\">AWS</code> <code class=\"language-text\">Terraform</code> <code class=\"language-text\">k8s</code> <code class=\"language-text\">react</code></p>\n<ul>\n<li><a href=\"http://www.devsisters.com\">공식사이트</a>, <a href=\"https://game.devsisters.com/ko/cookierun/\">게임사이트</a> 등 수동으로 관리되던 컨텐츠들의 관리와 배포를 <strong>자동화</strong></li>\n<li>\n<p>높은 커스텀 자유도를 가진 오픈소스 Headless CMS <strong>Strapi</strong>를 이용, 다양한 기능들을 추가함</p>\n<ul>\n<li>유튜브에 업로드 되는 컨텐츠들을 cronjob으로 매번 업데이트</li>\n<li>사용자들이 쉽게 <strong>원하는 환경</strong>(preview, production)에서 컨텐츠들을 배포할 수 있게끔 개발(서버, 프론트 모두 개발)</li>\n</ul>\n</li>\n<li>키워드: <code class=\"language-text\">Headless CMS</code>, <code class=\"language-text\">react</code></li>\n<li>기여 범위: 서버 및 어드민 페이지 프론트 전체</li>\n</ul>\n<h2 id=\"202104\" style=\"position:relative;\"><a href=\"#202104\" aria-label=\"202104 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2021.04</h2>\n<p>~ 2021.05</p>\n<p><code class=\"language-text\">데브시스터즈</code></p>\n<h2 id=\"쿠키런킹덤-10억감사제-당첨자-조회-서버\" style=\"position:relative;\"><a href=\"#%EC%BF%A0%ED%82%A4%EB%9F%B0%ED%82%B9%EB%8D%A4-10%EC%96%B5%EA%B0%90%EC%82%AC%EC%A0%9C-%EB%8B%B9%EC%B2%A8%EC%9E%90-%EC%A1%B0%ED%9A%8C-%EC%84%9C%EB%B2%84\" aria-label=\"쿠키런킹덤 10억감사제 당첨자 조회 서버 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>쿠키런:킹덤 10억감사제 당첨자 조회 서버</h2>\n<ul>\n<li>사은품 추첨 결과 조회 및 당첨자의 정보 수집용 사이트의 서버</li>\n<li>당첨자 정보 수집 후 유관 부서에 제공</li>\n</ul>\n<p><code class=\"language-text\">NodeJS</code> <code class=\"language-text\">Typescript</code> <code class=\"language-text\">GraphQL</code> <code class=\"language-text\">MySQL</code> <code class=\"language-text\">Docker</code> <code class=\"language-text\">AWS</code> <code class=\"language-text\">Terraform</code> <code class=\"language-text\">k8s</code></p>\n<ul>\n<li>키워드: <code class=\"language-text\">GraphQL</code>, <code class=\"language-text\">커뮤니케이션</code></li>\n<li>기여 범위: 서버 전체 및 수집 데이터 관련 커뮤니케이션/전달</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 114.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAsSAAALEgHS3X78AAADtElEQVQ4y5WVW28bVRDH++F4Lg/wFVBFU1QheKiQUKsWtcBDiJBaIfGCxKVCQlAaCGqTxnEax7k0F9txfF/biS+78XW9tne9690fZ49jJy1OKlYazZzZmf85c+ZyriA+z4OBZWFZJqbZF9ySXMqnfKQ3z+lNufbJcRxcd+hDcWUE6GHbtvwxJl/nf67gvuS6riROZcc5s7ftgVy/BjgcDidOvlw9yrG/HiCfjBPZCJKMbHOsZNgPBwRPSOeRj3cx4Jh80GI2TXR9gVL2FdHwAqm9ZUq5XRK7QRSxiTcBdN8GKO5DWLvGApnw50SXZ0m8vM/2wl1iL76gsH0Lt7vC0GVkexmgDFeAmY1NlKWrJEJzHIZ/IbPxkMO170iEfyC1dp/80rvYRmq0sUjGdEAfzO6P7saqY7YKchO9pdLvd2g3VbpGE8d2MJtZHKsl7+8/gONs9oRj8ukDDjcXaTY7NGoa6egmK09/EslZZO2fX1md/1nqalpVgIzC9d2nAnb1Oskfr7H55HsymSotLc9JSUEtpmioRzS1kpDT1Mp5Kkoc2+zIiKyezmBgnQ/Zk7sMnQHdWpq+odJrl+h3KpJbXVU4afT0stBVMY0qlrDR6wodQVZXEye0piXFFndXpVmJkNxZQIm9IB8PkN57xlFqjZxYZ6NLHKdDUi4cBmlUogzNynRAX+HZDXAaOH0Vu69JGvYrwknFtYRsVsWF1XB6FWFXF45NPKf1RsjeKGTXbtOI3KK88RGl8E06sU8w4p+SWr6OsnqDXHCG+PMPSQdmhG6GxNJ1Eosf0IzdwRm0BeDwdcChrdNOznISeUD94Gss5Ruc/By59Xtk1++ihO+RXL1NJnRH8oQvr91GzzwSgPo5wMkdulLZ7RooOYWDeJzdwxgnjRPGX7F4RFb8U/J50ukM3d6obt/I8lmnOAOTQlHh2e9/k9gJ8tXzFeZD236p0zG6AiRNtVKlUq5QyBc4Pj6W7XdxL4tsKcUCod8eU34Z5ObDCn8uR4WFX8TQ0ltEcwfsZfYp18qi1C7pZT9cb2gRSWZZmbuB+u0s711VePzHljzhYCBaTgzTumgAtanR7uqTgXIhoOuYxJIZnnx5jeRn7/PxO4+Y/yskT1gWoaaSKbY2twgsB9h5tSNDNgzjdNhOCdkvULNvoJ3UOCqX0LSCGAhteQLfsdVqoqoqpVKJWq2GruvyuXjrgAVvktnxBB8NgjO9X2vjCX/5PDwHfH6CT9NfOrHlC3b6yv1fMs3e5NX7F/k1u3mHauDlAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"쿠키런:킹덤 10억감사제 당첨자 조회 사이트의 모습\"\n        title=\"쿠키런:킹덤 10억감사제 당첨자 조회 사이트의 모습\"\n        src=\"/static/2d32e3b1c1908b38cd10efffb8212aac/c1b63/image-2.png\"\n        srcset=\"/static/2d32e3b1c1908b38cd10efffb8212aac/5a46d/image-2.png 300w,\n/static/2d32e3b1c1908b38cd10efffb8212aac/0a47e/image-2.png 600w,\n/static/2d32e3b1c1908b38cd10efffb8212aac/c1b63/image-2.png 1200w,\n/static/2d32e3b1c1908b38cd10efffb8212aac/844cc/image-2.png 1306w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>쿠키런:킹덤 10억감사제 당첨자 조회 사이트의 모습</p>\n<h2 id=\"202007-1\" style=\"position:relative;\"><a href=\"#202007-1\" aria-label=\"202007 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2020.07</h2>\n<p>~2021.06</p>\n<p><code class=\"language-text\">데브시스터즈</code></p>\n<h2 id=\"신규게임-사전예약-및-이벤트-서버\" style=\"position:relative;\"><a href=\"#%EC%8B%A0%EA%B7%9C%EA%B2%8C%EC%9E%84-%EC%82%AC%EC%A0%84%EC%98%88%EC%95%BD-%EB%B0%8F-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%84%9C%EB%B2%84\" aria-label=\"신규게임 사전예약 및 이벤트 서버 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>신규게임 사전예약 및 이벤트 서버</h2>\n<ul>\n<li>\n<p>신규게임들(쿠키런: 킹덤, <a href=\"https://www.playbrixity.com/ko/\">브릭시티</a>)의 <strong>사전예약</strong>을 받고, 관련 이벤트 등을 진행하기 위한 서버</p>\n<ul>\n<li>사전예약자들의 이메일, 전화번호 등 개인정보를 global하게 수집</li>\n<li>사전예약자들에게 <strong>node-canvas로 생성</strong>된 시민권 이미지를 발급하는 이벤트 등이 있었고, 관련 <strong>프로파일링</strong> 경험을 <a href=\"https://tech.devsisters.com/posts/perf-citizen-card/\">기술블로그</a>에 공유</li>\n<li>sendinblue(메일링 관리 솔루션)과 사전예약자 DB 연동, AWS SES 활용 메일링 등의 메일링 관련 작업도 진행</li>\n</ul>\n</li>\n</ul>\n<p><code class=\"language-text\">NodeJS</code> <code class=\"language-text\">Typescript</code> <code class=\"language-text\">GraphQL</code> <code class=\"language-text\">MySQL</code> <code class=\"language-text\">Docker</code> <code class=\"language-text\">AWS</code> <code class=\"language-text\">Terraform</code> <code class=\"language-text\">k8s</code></p>\n<ul>\n<li>키워드: <code class=\"language-text\">node-canvas</code>, <code class=\"language-text\">GraphQL</code>, <code class=\"language-text\">profiling</code></li>\n<li>기여도: 시민권 이미지 생성 서버 전체 및 사전예약 서버 일부</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 40.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsSAAALEgHS3X78AAACeklEQVQozx2PW0hTcQCH99BjGRrRSCg10c2VLprNy9zGcfNs3qdOnW7Ts+V2Np3O4+Xs7D4t6CZE1EMvSZDhQz0UUYQQhD6kIF2MzR6igiDoPcKzzv+X9vCD7+Hjg5+swUD90RmpvElVJJqVR0TL2UKRVh0V9WWHxCaVfK/O0Ix6g2mn3kDtNBqbYaqW75krD4vWc0X/Z9png/KYqNUZ81q96beM5TN/J/kEWqqPw2tVQ2DaEB3tAO+g0KVTkNTCFUQSqZxvLrXLxRfR2VhOgr11CNn1mBo0IthRhTZNMYRYEtFkWpR5uHi+vccBfXkB6dHKiddSSW6ODZClSSfppdRSSMhggPFkXRMzuY7BMfhbFdKy6zy5ZlGQJF1JbjmqSKhbSXzTcQx6vaKMi6fz3X1tcDefIhmXGhx9Gpy1HHxfBYYtNZJvLg1PWMjOJDI5+1A/BE+T9Gsrgp8fl7G79Qjftx/g6mwXGWY5jM3G94PRdJ4Zn8Fi4CJ5lW7Dyo0wVib78TRhhuA3Skw4AZZPZaejqRw7EwPP1ErfXnbjx4fb+PLuHr5uRLDI1pLhwDwCkYwoY7m5vMN9CUuxFrJ+14PV6zGsxvxYu+NEkm2UbHQ77O7xbGCWz/kmJmEzqqRRcwkYa+XBK4xQJ9GpOUF6aRr9rsB+kE/l3YFphBxa8vnTOjZfP8PO9jrevnkMF1Uq2TQVYJiRLCtczrEcj1azWTIFHkLXv4DyMi2UajvqFGWkV1MCt3NIlPnnU3nvlABbQzHZeEJj83k33q/14MV9AzrrS6XxkB9MOJxl59O5IJ9Gq/aMRCkL4WzRwE1fgLGiAHSNnASD3gNP/AebHFCerPmJ5AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"쿠키런:킹덤 사전예약 사이트 중 시민권 발급 이벤트의 모습\"\n        title=\"쿠키런:킹덤 사전예약 사이트 중 시민권 발급 이벤트의 모습\"\n        src=\"/static/3bbdfd207c66f5d3418a1fecf2811186/c1b63/image-3.png\"\n        srcset=\"/static/3bbdfd207c66f5d3418a1fecf2811186/5a46d/image-3.png 300w,\n/static/3bbdfd207c66f5d3418a1fecf2811186/0a47e/image-3.png 600w,\n/static/3bbdfd207c66f5d3418a1fecf2811186/c1b63/image-3.png 1200w,\n/static/3bbdfd207c66f5d3418a1fecf2811186/6c86f/image-3.png 1720w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>쿠키런:킹덤 사전예약 사이트 중 시민권 발급 이벤트의 모습</p>\n<h2 id=\"202003\" style=\"position:relative;\"><a href=\"#202003\" aria-label=\"202003 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2020.03</h2>\n<p>~2020.06</p>\n<p><code class=\"language-text\">셀렉트스타</code></p>\n<h2 id=\"근태관리용-slack-챗봇-너굴\" style=\"position:relative;\"><a href=\"#%EA%B7%BC%ED%83%9C%EA%B4%80%EB%A6%AC%EC%9A%A9-slack-%EC%B1%97%EB%B4%87-%EB%84%88%EA%B5%B4\" aria-label=\"근태관리용 slack 챗봇 너굴 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>근태관리용 Slack 챗봇 ‘너굴’</h2>\n<ul>\n<li>슬랙 명령어를 통해, 사원들의 출퇴근 및 월간 근무시간 관리 등을 담당하는 챗봇을 개발</li>\n</ul>\n<p><code class=\"language-text\">Spring Framework</code> <code class=\"language-text\">Kotlin</code> <code class=\"language-text\">Jenkins</code></p>\n<ul>\n<li>키워드: <code class=\"language-text\">REST api</code>, <code class=\"language-text\">Spring Framework</code>, <code class=\"language-text\">Kotlin</code>, <code class=\"language-text\">Slack API</code></li>\n<li>기여 범위: 서버 전체</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 492px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 86%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsSAAALEgHS3X78AAACnElEQVQ4y42Uy2sTURTGs9diNO/MTDJ5zSS2ad7JJJNMZpK0tVBwUagPUBHdaPFR00WF0mJ9FVcuCoLg/+DGvVv3Cl2IG0EU1+Ly85zbNLYhaBYf5947d373O+fcGVcsoiAUCMA9NQX3yRMI01gOBRHweqCEQ1AVGVFZEvFfOtzjCgcD6Fl1bD3s49H2NmyzhmI+j3Pzc5hO60PoJDCOrjNuN3a3+vj15T1+f/uAnc0HmOt2sXbvLsqFPCQ6UFWUyR36PB6sr17D643z+PjuCdZvX0BaS+OsnhIwLglvniRtAQz6vLh66SKW7CpebK7h8soKQn4fkjFVQDjloyn9FxiRZOjJABxThVkOQYv5kNF0ZMghQzNaCgk1OpE7AXSfkvHqmYIf+7fwfb+P5xsyFhaWceP6FXTsNpYWF5GKx6j7fijUfXmMuDQcB02RsPc0gq+fHuPn5z283CFXehGWaWAmkxaNaTbqaJkNNGpVNOuGiCyjUoZJc8s0US0VDxz6vSGs3szhzXIXb3f7uH+ngcJsCV3bgmnUYLea6LQtIceyYDVNetYW6jk27TFQokMLs9kDYFSREJMi0E57MJ1QEY+q4mGlWBBu6tUKDBLD2VExnxNu23RQg9by2axo4jBlVabuETQSVaBIYVoMo0ywOqXE7rrsgsAMa1HqDGGX7WZTQDO6dqz7ruFE/tsp3uhQihxtqyXG7IqhvY4j5lzXXHZmeL2GX8robeeLzC9wodkF147rNd/tiAPaXENybVQqiFBGrGNfyiiQVSuXBJDlkEO71RLpMsgZOGZno7CxQI7syKIUrUHxubvcUa4rO+bxIv08uFGjP4+xQD2ZgJaII0XiqNGc1/iCs7TBOo9HP0fXuF/QYW0m0dFS8fgP3/oLqm2mRA8AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"당시 개발한 슬랙 챗봇 ‘너굴’의 후신 ‘덕비스’, 본 이미지의 대사와 기능은 ‘너굴’과 동일\n출처) [셀렉트스타 블로그](https://blog.selectstar.ai/ko/welfare)\"\n        title=\"당시 개발한 슬랙 챗봇 ‘너굴’의 후신 ‘덕비스’, 본 이미지의 대사와 기능은 ‘너굴’과 동일\n출처) [셀렉트스타 블로그](https://blog.selectstar.ai/ko/welfare)\"\n        src=\"/static/497e353b515611a4652ab7d64053ff42/5c6e9/image-4.png\"\n        srcset=\"/static/497e353b515611a4652ab7d64053ff42/5a46d/image-4.png 300w,\n/static/497e353b515611a4652ab7d64053ff42/5c6e9/image-4.png 492w\"\n        sizes=\"(max-width: 492px) 100vw, 492px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>당시 개발한 슬랙 챗봇 ‘너굴’의 후신 ‘덕비스’, 본 이미지의 대사와 기능은 ‘너굴’과 동일\n출처) <a href=\"https://blog.selectstar.ai/ko/welfare\">셀렉트스타 블로그</a></p>\n<h2 id=\"202003-1\" style=\"position:relative;\"><a href=\"#202003-1\" aria-label=\"202003 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2020.03</h2>\n<p>~2020.08</p>\n<p><code class=\"language-text\">개인</code></p>\n<h2 id=\"kaist-총학생회-사이트\" style=\"position:relative;\"><a href=\"#kaist-%EC%B4%9D%ED%95%99%EC%83%9D%ED%9A%8C-%EC%82%AC%EC%9D%B4%ED%8A%B8\" aria-label=\"kaist 총학생회 사이트 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>KAIST 총학생회 사이트</h2>\n<ul>\n<li><a href=\"https://student.kaist.ac.kr/web/main\">KAIST 총학생회 사이트</a>의 초기 서버와 프론트 개발 (2인)</li>\n</ul>\n<p><code class=\"language-text\">NodeJS</code> <code class=\"language-text\">Koa</code> <code class=\"language-text\">Sequelize</code> <code class=\"language-text\">MySQL</code> <code class=\"language-text\">Nginx</code> <code class=\"language-text\">React</code></p>\n<ul>\n<li>키워드: <code class=\"language-text\">NodeJS</code> <code class=\"language-text\">React</code></li>\n<li>기여도: 서버와 프론트 각각 일부분</li>\n</ul>\n<hr>\n<h1 id=\"education\" style=\"position:relative;\"><a href=\"#education\" aria-label=\"education permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>EDUCATION</h1>\n<h3 id=\"201803\" style=\"position:relative;\"><a href=\"#201803\" aria-label=\"201803 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2018.03</h3>\n<p>~ 2019.12</p>\n<h3 id=\"kaist\" style=\"position:relative;\"><a href=\"#kaist\" aria-label=\"kaist permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>KAIST</h3>\n<ul>\n<li>전산학부 4학기 재학(현 휴학)</li>\n<li>웹 개발 동아리 SPARCS 활동(2학기)</li>\n<li><a href=\"https://student.kaist.ac.kr/\">카이스트 총학생회 웹페이지</a> 개발</li>\n</ul>\n<h3 id=\"201503\" style=\"position:relative;\"><a href=\"#201503\" aria-label=\"201503 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2015.03</h3>\n<p>~ 2018.02</p>\n<h3 id=\"경기과학고등학교\" style=\"position:relative;\"><a href=\"#%EA%B2%BD%EA%B8%B0%EA%B3%BC%ED%95%99%EA%B3%A0%EB%93%B1%ED%95%99%EA%B5%90\" aria-label=\"경기과학고등학교 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>경기과학고등학교</h3>\n<ul>\n<li>정보올림피아드 동상(경기도 지역) 수상</li>\n</ul>\n<hr>\n<h1 id=\"activites\" style=\"position:relative;\"><a href=\"#activites\" aria-label=\"activites permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ACTIVITES</h1>\n<h3 id=\"202102-데브시스터즈-기술블로그-글-기고\" style=\"position:relative;\"><a href=\"#202102-%EB%8D%B0%EB%B8%8C%EC%8B%9C%EC%8A%A4%ED%84%B0%EC%A6%88-%EA%B8%B0%EC%88%A0%EB%B8%94%EB%A1%9C%EA%B7%B8-%EA%B8%80-%EA%B8%B0%EA%B3%A0\" aria-label=\"202102 데브시스터즈 기술블로그 글 기고 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2021.02 데브시스터즈 기술블로그 글 기고</h3>\n<p><a href=\"https://tech.devsisters.com/posts/perf-citizen-card/\">사전예약 서버 프로파일링으로 서버 병목찾아 개선하기</a></p>\n<h3 id=\"202112-데브시스터즈-kaist-전산학부-기업체-탐방-행사-패널-참여\" style=\"position:relative;\"><a href=\"#202112-%EB%8D%B0%EB%B8%8C%EC%8B%9C%EC%8A%A4%ED%84%B0%EC%A6%88-kaist-%EC%A0%84%EC%82%B0%ED%95%99%EB%B6%80-%EA%B8%B0%EC%97%85%EC%B2%B4-%ED%83%90%EB%B0%A9-%ED%96%89%EC%82%AC-%ED%8C%A8%EB%84%90-%EC%B0%B8%EC%97%AC\" aria-label=\"202112 데브시스터즈 kaist 전산학부 기업체 탐방 행사 패널 참여 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2021.12 데브시스터즈-KAIST 전산학부 기업체 탐방 행사, 패널 참여</h3>\n<ul>\n<li>“데브시스터즈 입사꿀팁” 실시간 발표, Q&#x26;A 진행(3명, 30분)</li>\n<li>“신입개발자”를 테마로 재학생 20~30여명과 실시간 Q&#x26;A 진행(2명, 60분)</li>\n</ul>\n<h3 id=\"202202-사내-서버개발자-모임-월간-서버에서-발표\" style=\"position:relative;\"><a href=\"#202202-%EC%82%AC%EB%82%B4-%EC%84%9C%EB%B2%84%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%AA%A8%EC%9E%84-%EC%9B%94%EA%B0%84-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-%EB%B0%9C%ED%91%9C\" aria-label=\"202202 사내 서버개발자 모임 월간 서버에서 발표 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2022.02 사내 서버개발자 모임 “월간 서버”에서 발표</h3>\n<p>제목: 데브라이브 인프라 개발기</p>","frontmatter":{"title":"about","date":"January 27, 2019","lang":"en"}}}]}},"pageContext":{}}}