Web Server

클라이언트가 GET, POST 등의 메소드를 이용해 전송한 요청을 받아 HTML이나 오브젝트를 HTTP 프로토콜을 이용해 전송하는 프로그램이다. 웹 서버는 웹페이지, 이미지 등 정적인 컨텐츠만 제공할 수 있다. 

 

WAS(Web Application Server)

WAS란 Web Server와 Web Container의 결합으로 이루어진 소프트웨어이다. Web Server를 포함하고 있기 때문에 Web Server처럼 사용할 수 있다. Web Server와 달리 WAS는 동적인 페이지를 만들어 유연하게 응답할 수 있다는 점이다. 

 

Web Server는 정적인 컨텐츠만 제공하기 때문에 클라이언트의 요구에 유연하게 대처하기 어렵다. DB와 연결해 데이터를 주고받거나 데이터 조작을 하여 동적인 페이지를 생성해 응답하기 위해서는 WAS를 사용하고 있다. 

 

 

Tomcat

아파치 재단에서 만든 오픈소스 WAS(Web Application Server)이다. Tomcat은 Java Servlet과 JSP가 실행할 수 있는 환경을 제공하여 동적인 페이지를 생성한다. DB연결 및 데이터 조작, 응용프로그램과 상호작용이 가능하다.

 

Tomcat에는 서버가 start 되는 시점에 읽어 들여서 동작을 준비하는 xml 문서가 있다.

Tomcat/ 하위에 있는 폴더의 .xml 파일에 환경 설정을 하면 Tomcat 서버를 이용하는 모든 웹 어플리케이션에 동일한 환경설정이 적용된다.

 

- context.xml

- server.xml

- tomcat-users.xml

- web.xml

 

서버실행시 읽는 순서

request -> catalina -> context -> servlet -> response

 

context.xml

톰캣에 대한 구체적인 환경설정 옵션(ex access log, data sources, session manager 등)

context 설정은 톰캣에서 구동되는 하나의 웹 어플리케이션 자체의 설정을 의미한다. 

톰캣이 요청을 받으면 Catealina가 요청에 맞는 Context를 찾고,

Context는 자신이 설정된 어플리케이션의 deployment description file(web.xml)을 기반으로 

전달받은 요청을 Servlet에게 전달하여 처리되도록 한다. 

 

 

web.xml

web.xml에서 설정한 것은 전체 어플리케이션에 적용된다.

 

 

WEB-INF

src/main/webapp/WEB-INF

Web Information의 약자이고, WEB-INF폴더에는 브라우저에 직접 접근할 수 있고, 오직 서버내에서만 접근이 가능하다. 

 

META-INF

src/main/webapp/META-INF

- java에서 설정 관련 파일을 저장하는 폴더

- java 패키징 기술인 jar의 일부

 

'🧐Programming' 카테고리의 다른 글

Servlet  (0) 2024.01.19
Java가 파일을 읽도록 하는 법  (0) 2024.01.14
Logging | SLF4J  (0) 2024.01.14
React | export와 export default의 차이  (0) 2023.08.12
OCP  (0) 2022.02.21

✏️ 주간 공부 내용 요약

짧은 SQL 시간을 끝내고, 실습 한 번 해보고 서버 수업으로 들어간 듯 하다. WAS 역할을 해주는  Tomcat 서버에 대해서 공부했고, java로 html파일을 다루는 방법을 배웠다. 


[1.15.월요일]
- 데이터 모델링 

 

[1.16.화요일]
- 프로젝트에서 JDBC 작업(실제로 DBMS와 통신을 수행하는 역할 담당)

- DAO (실제로 데이터에 접근하는 객체)

- lombok 라이브러리 사용
- Properties 객체, Connection 객체

 

[1.17.수요일]

- JDBC 프로젝트 진행

 

[1.18.목요일]

- 서버 개발 시작

- Servlet
- Tomcat 웹 서버
- Web Server, WAS 차이

 

[1.19.금요일]
- 싱글톤 패턴
- Servlet 실습

- 스프링 프레임워크 책

 

🧐  Web Server / WAS

정적인 요청은 Web 서버, 동적인 요청은 WAS

 

🧐 Servlet

클라이언트가 어떤 요청을 하면 그 결과를 다시 전송해주는 역할을 한다. 웹 어플리케이션 서버에서 동작하는 프로그램 구현시 사용하며, Servlet은 클라이언트 요청에 따라 서버가 실행할 수 있는 유일한 자바 파일이다. Servlet API를 통해 제공받을 수 있으며, 구현을 위해서는 HttpServlet을 상속 받으면 된다. 

 

 

Servlet

자바파일에서 javax.servlet.Servlet 인터페이스를 구현해서 작성 spring이 servlet stack기반 기술이다. 그래서 잘 알아놓아야한다. servlet 스펙을 구현한 Tomcat 웹 서버를 설치하여 활용 가능 Servlet이란 클

jieum.tistory.com

 

🧐 Apache Tomcat

JavaEE & Jakarta EE platform이 요구하는 스펙을 구현한 구현체

tomcat은 내장기능으로 web server, was 내장

 

 

Tomcat

Web Server 클라이언트가 GET, POST 등의 메소드를 이용해 전송한 요청을 받아 HTML이나 오브젝트를 HTTP 프로토콜을 이용해 전송하는 프로그램이다. 웹 서버는 웹페이지, 이미지 등 정적인 컨텐츠만 제

jieum.tistory.com

 

📍이번주 회고와 다음주 계획

이번주는 토익 인강을 듣기 시작해서, 집가면 무조건 토익이었다. 추가로 자바랑 스프링 공부 더 하고싶은데 추가적인 시간 내기가 어려웠다. 운동 주 2회, 매일 영어 공부, 코테.. 다음주는 잠을 좀 줄어야겠다.

자바파일에서 javax.servlet.Servlet 인터페이스를 구현해서 작성

spring이 servlet stack기반 기술이다. 그래서 잘 알아놓아야한다.

servlet 스펙을 구현한 Tomcat 웹 서버를 설치하여 활용 가능

 

Servlet이란

 

클라이언트가 어떤 요청을 하면 그 결과를 다시 전송해주는 역할을 한다.

웹 어플리케이션 서버에서 동작하는 프로그램 구현시 사용한다.

서블릿은 클라이언트의 요청에 따라 서버가 실행할 수 있는 유일한 자바 파일이다. 

 

서블릿을 동작시키기 위한 조건은 서블릿 API를 통해 제공받을 수 있으며, 

서블릿을 구현할 때 해당 API인  javax.servlet.http.HttpServlet 만 상속(extends) 받으면 됨

 

모든 자바 파일에 extends HttpServlet을 작성하여 해당 java 파일을 서블릿으로 동작하도록 구현

 

 

 

 

HttpServlet

HttpServlet을 상속받은 클래스를 Servlet 이라고 함

HTTP 요청 메서드에 따라 doGet(), doPost(), doPut() 등 요청 메서드에 맞는 메서드를 재정의(Overriding)하여 사용해야함

 

doGet() : 해당 서블릿이 HTTP GET 요청을 받았을 때 동작하는 메서드

doPost() : 해당 서블릿이 HTTP POST 요청을 받았을 때 동작하는 메서드

그 외 수명주기와 관련된 init(), destory()

 

class HelloServlet extends HttpServlet { ... }

 

 

Servlet을 왜 쓰는지

사용자의 요청에 의해 생성된 서블릿 객체는 서블릿 컨테이너 내부에 보관한다. 이후 동일한 경로로 요청이 올 경우, 

보관하고 있던 서블릿을 재사용하여 요청 시마다 새롭게 서블릿 객체를 생성하지 않는다. 

 

서블릿 컨테이너가 서블릿 클래스들을 인스턴스화하고

서블릿 컨테이너 내부에 보관하고 있다가 요청에 따라 해당 서블릿 객체를 재실행 시켜주는 역할을 함

클라이언트로부터의 요청이 최초 요청인지 아닌지에 따라 해당 요청에 맞는 서블릿 객체의 생성 여부가 결정됨

이 서블릿 컨테이너 중 대표적으로 Apache Tomcat이 있다.

 

@WebServlet(urlPatterns="/first-request-servlet")
public class FirstHttpRequestServlet extends HttpServlet {
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("request" + req);
		System.out.println("response" + resp);
	}
}

 

 

pom.xml

Maven의 빌드 정보를 담고 있는 파일. POM(Project Object Model)을 설정하는 부분으로, 프로젝트 내 빌드 옵션을 설정하는 부분이다. 다른 프로젝트에서도 복붙이 가능하여, 협업할 때 버전 통일할 때 편하게 할 수 있다.

데이터베이스와 연결을 해야할 때 dependency로 추가하는 부분이 있었다.

<dependency>
	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>8.0.13</version>
</dependency>

 

web.xml

웹 애플리케이션의 서비스 처리에 관한 내용이 정의된 환경 설정 파일.

웹 서버는 web.xml에 정의된 내용대로 웹 애플리케이션을 실행하기 위한 설정을 수행함

서버가 기동될 때 이 파일을 읽는다. node.js 환경에서 package.json과 같은 역할을 한다.

모든 Web Application은 반드시 하나의 web.xml 파일을 가져야하고, 위치는 WEB-INF폴더 하위에 있다.

web.xml파일의 설정들은 Web Application 시작 시 메모리에 로딩된다.

Application에 대한 요청이 수신되면 web.xml을 사용하여 요청의 url을 해당 요청을 처리해야하는 코드에 매핑한다.

<web-app>
	<!-- alias -->
    <servlet>
    	<servlet-name>title</servlet-name>
    	<servlet-class>servlets.Servlet</servlet-class>
    </servlet>
    
    <!-- mapping -->
    <servlet-mapping>
    	<servlet-name>title</servlet-name>
    	<url-pattern>title</url-pattern>
    </servlet-mapping>
</web-app>

 

 

WebServlet

@WebServlet(urlPatterns="/first-request-servlet")
public class FirstHttpRequestServlet extends HttpServlet {
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("request" + request);
		System.out.println("response" + response);
		
		// 요청메세지 안에 뭐가 담겼는지 확인하기 위한 메서드가 있음
		request.getContextPath();
		request.getRequestURI();
		
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		
		// Header 메시지 담긴 정보 추출
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<head>");
		out.println("<title>Request Information Example</title>");
		out.println("</head>");
		
		out.println("<body>");
		
		out.println("<h3>요청 메시지에 담긴 정보 확인</h3>");
		
		// Header 메시지에 담긴 정보 추출
		out.println("Context Path : " + request.getContextPath() + "<br/>");
		out.println("Request URL : " + request.getRequestURL() + "<br/>");
		out.println("Request URI : " + request.getRequestURI() + "<br/>");
		out.println("Server Port : " + request.getServerPort() + "<br/>");
		out.println("Request Protocol : " + request.getProtocol() + "<br/>");
		out.println("Request METHOD: " + request.getMethod() + "<br/>");
		out.println("Query String : " + request.getQueryString() + "<br/>");// http://localhost:8080/step02servletsyntax/first-request-servlet?name=jerry&age=15
		out.println("Parameter(name) : " + request.getParameter("name") + "<br/>");
		out.println("Parameter(age) : " + request.getParameter("age") + "<br/>");
		
		out.println("</body>");
        out.println("</html>");
        
		out.close();
	}
}

 

요청에 담긴 정보들을 서버가 알 수 있게 꺼내야함

HttpServlet 객체가 이 정보들을 가지고 있고, request와 response 정보를 받을 수 있다.

 

 

/*
 * 2. Annotation 기반 맵핑
 * 
 * XML을 통한 관련 방식의 번거로움
 * 추상화되고 직관적인 Annotation 표기법으로 맵핑 처리를 간소화
 * 
 *  * @WebServlet
 * https://github.com/javaee/servlet-spec/blob/master/src/main/java/javax/servlet/annotation/WebServlet.java
 */
@WebServlet(name = "MySecondServlet", urlPatterns = "/servlets/secondservlet")
/*
 * web.xml의 아래 설정과 동일함
 * <servlet-name>SecondServlet </servlet-name>
 * <url-pattern>/servlets/secondservlet</url-pattern>
 */
public class SecondeServlet extends HttpServlet {
	// get요청을 통해 hello second world가 출력되도록 테스트
	// 서버 응답시 HTTP Header에 인코딩은 UTF-8로 처리될 수 있도록 헤더 코드도 추가
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html");
		resp.setCharacterEncoding("UTF-8");
		
		PrintWriter out = resp.getWriter();
		out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello Second World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello Second World!</h1>");
        out.println("</body>");
        out.println("</html>");
	}
}

 

 

Url-patterns

 

'🧐Programming' 카테고리의 다른 글

Tomcat  (0) 2024.01.22
Java가 파일을 읽도록 하는 법  (0) 2024.01.14
Logging | SLF4J  (0) 2024.01.14
React | export와 export default의 차이  (0) 2023.08.12
OCP  (0) 2022.02.21

Maven Repository에서 필요한 모듈을 가져와서 써야하는 경우가 생겼다.

자바에서는 프로젝트에 어떻게 넣어줘야할까

 

 

Build Path

자바 프로젝트를 빌드하는데 필요한 모든 리소스 파일들이 모여있는 경로이다.

이클립스에서는 다음과 같은 경로에서 찾을 수 있다.

 

대부분의 편집기에서는 자바 프로젝트를 빌드하고 컴파일하기 위해 build path를 사용한다고 한다.

소스코드는 .java

실행파일은 .class

 

Build Path는 의존성을 찾는 빌드과정에서 사용된다.

 

Class Path

클래스 패스는 JVM이 사용하는 환경 변수로, JVM이 프로그램 실행시 클래스를 찾고 로딩하는데 사용된다. JVM이 클래스 파일을 찾고 로드해야하는 디렉토리, jar 파일 및 zip 파일 목록을 지정해야한다.

 

Class Path는 소스 코드가 실행되는 런타임에 사용된다. (빌드시에도 사용된다)

 

 

 Add External JARs 를 통해서 .jar 파일을 주입해주었다. 
 

'🧐Programming' 카테고리의 다른 글

Tomcat  (0) 2024.01.22
Servlet  (0) 2024.01.19
Logging | SLF4J  (0) 2024.01.14
React | export와 export default의 차이  (0) 2023.08.12
OCP  (0) 2022.02.21

Logging

로깅이란 프로그램 실행 중에 발생하는 오류에 대해 디버깅하거나 운영 중인 프로그램을 모니터링 하기 위해 로그를 기록하는 것. 콘솔에 출력하거나 파일 등에 전달하여 저장하는 행위

 

SLF4J

풀 네임은 Simple Logging Facade for Java (SLF4J) 라는 이름에서 알 수 있듯이 로깅에 대한 추상화(인터페이스) 역할을 하는 라이브러리이다. 이름에서부터 Facade가 들어가있다. 즉, Facade를 통해서 클라이언트 코드에서는 실제 구현을 모르고 로깅 프레임워크를 사용할 수 있다. 

 

Facade Pattern

Facade는 건축에서 건물 외관이라는 뜻으로 사용되는 용어이다. 이와같이 내부적으로 복잡한 코드를 가져주는 상위 수준의 인터페이스 역할을 하는 객체가 있는 패턴이다. 

 

이와 같이 코드 상에서도 복잡한 서브시스템을 외부에서 감싸고 있는 느낌이다. 계좌를 분석해주는 기능을 구현할 때, 바로 기능을 구현하지 않고, anylze()라는 메소드를 통해서 실행을 시켰었다. 이때 analyze가 전면에서 인터페이스 역할을 해주었다. 실제 analyze() 내부 로직에서 파서가 실행되고 유효성 검사 등을 하는 로직이 돌아가게 되었다. 

이 패턴을 통해 복잡성을 줄이고 의존성을 낮출 수 있다. 

 

SLF4J에서 사용되는 Facade Pattern

SLF4J에서 facade역할을 하는 인터페이스는 무엇일까? 바로 logger 객체이다. 그래서 구현부에 상관없이 logging 처리를 할 수 있다. 실제로 SLF4J는 logback 등 패키지 안에 다른 모듈을 포함하고 있다.

 

class diagram으로 본 개념

Client 클래스는 Subsystem인 하위 객체에 직접 접근하지 않고 Facade 객체에만 접근한다. Client는 Facade 인터페이스에만 의존하고 복잡한 하위 시스템과는 독립적이다.

 

 

 

seqeunce diagram으로 본 개념

위 시퀀스 다이어그램을 통해서 런타임시 Client 와 Facade의 상호작용을 볼 수 있다.

 

 

SLF4J 동작과정

- SLF4J API를 사용하여 로깅 코드를 작성한다

- 배포할 때, 바인딩 된 로깅 프레임워크가 실제 로깅 코드를 수행한다.

 

 

 

참고자료

 

Facade pattern - Wikipedia

From Wikipedia, the free encyclopedia Software design pattern The facade pattern (also spelled façade) is a software-design pattern commonly used in object-oriented programming. Analogous to a facade in architecture, a facade is an object that serves as a

en.wikipedia.org

 

 

SLF4J - Wikipedia

From Wikipedia, the free encyclopedia Simple Logging Facade for Java (SLF4J) provides a Java logging API by means of a simple facade pattern. The underlying logging backend is determined at runtime by adding the desired binding to the classpath and may be

en.wikipedia.org

 

'🧐Programming' 카테고리의 다른 글

Servlet  (0) 2024.01.19
Java가 파일을 읽도록 하는 법  (0) 2024.01.14
React | export와 export default의 차이  (0) 2023.08.12
OCP  (0) 2022.02.21
Recoil | Selector  (0) 2021.12.01

✏️ 주간 공부 내용 요약

자바에 대한 학습을 어느정도 마무리짓고, SQL 공부 시작한 주간. 콘솔앱 만들어보면서 객체지향적으로 코드짜는 방법과 프로젝트에 로거 API를 사용하는법을 배웠다. 이클립스에 모듈 추가하는 법, 코드 작성할 때 디자인 패턴을 어떻게 적용할 수 있는지 배웠다.  내가 소화는 못했더라도 선생님께서 키워드는 다 짚어주시기 때문에, 해당 키워드 가지고 부족하거나 궁금한 부분은 깊은 학습이 필요했다. 프론트엔드 과정에서는 아는 부분이었어서 괜찮았는데, 빠르게 지나간다는게 무슨 말인지 이제야 이해했다. 깊이있는 공부는 내가 다뤄보며 이해해야할 것 같다.

 

[1.9.월요일]
- 저번주차 콘솔 앱 구현 프로젝트 리팩토링하고 이슈남기기
- 자바 람다식, 함수형 인터페이스, 제너릭, 컬렉션, JUnit
 
[1.10.화요일]
- java logger api 사용 실습
- 디자인 패턴(Facade)
- 이클립스 build path classpath로 라이브러리 추가 및 제거
 
[1.10.수요일]
- logger 프레임 워크 SLF4J 실습
- 디자인 패턴(Builder)
- 직접 builder 패턴으로 구현
 
[1.11.목요일]
- SQL 시작
- MYSQL 설치 및 실습 시작
- 수업에 사용하는 책 <러닝SQL>
 
[1.12.금요일]
- SQL문 작성
- DML SELECT문 WHERE절, 서브쿼리 활용
- DDL 작성
 
 

🧐 Logging

빠른 커리큘럼상 한 가지 주제로 하루 이상을 넘기는 일이 잘 없는데 로거 하나로 3일 동안 수업이 진행되었다. 자바의 내장 api 모듈인 logger부터 사용해보고, 현재는 보안 이슈로 사용되지 않는다던 Log4j부터 SLF4J까지 순차적으로 사용해보았다. 중요한 부분인 것 같아서 더 찾아보았다. 스프링 부트의 공통 로그 모듈로 SLF4J가 사용되고 있고, 스프링을 공부할 때 더 깊이있게 학습해봐야겠다. 개념은 아래 포스팅으로 다시 정리했다.
 

 

Logging | SLF4J

Logging 로깅이란 프로그램 실행 중에 발생하는 오류에 대해 디버깅하거나 운영 중인 프로그램을 모니터링 하기 위해 로그를 기록하는 것. 콘솔에 출력하거나 파일 등에 전달하여 저장하는 행위 S

jieum.tistory.com

 

🧐 디자인패턴

디자인 패턴이 아키텍처 같은 서비스를 관통하는 하나의 패턴이라고 생각했는데, 코드 짜는 방법에 대한 디자인 패턴이었다. 정처기 공부하면서 생구행 중얼거리며 달달 외웠던 기억이 난다. 디자인 패턴의 생성 패턴 중 하나였던 Builder 패턴으로 코드를 작성해보면서 왜 생성 패턴인지 이해할 수 있었다. 하나의 디자인 패턴을 공부할 때 어떤 문제를 해결하기 위해 등장했는지 알아야 디자인 패턴을 잘 쓸 수 있다고 한다. 직접 사용해보니 더 이해도가 올라감을 느꼈다.
 

🧐 Facade 패턴

SLF4J에 대해 공부하면서 파사드 디자인 패턴에 대한 내용도 같이 학습하게 되었다. 왜 파사드 패턴인지 알 수 있었다. 프로그램 시작할 때 코드를 외부에서 추상화시켜준다. 디자인 패턴 중에서 '구조'에 해당하는 이유이다.
 

 

Java logging facades and bridges

Making sense of seemingly complicated java logging dependencies

deepakvadgama.com

 

🧐 Builer 패턴

- 객체의 생성에 대한 패턴
- 생성시 지정해야할 인자가 많을 때 사용(복잡한 구성의 객체를 효과적으로 생성하는 패턴)
- 객체 생성 시 여러 단게를 순차적으로 거칠 때, 이 단계의 순서를 결정해두고 각 단계를 다양하게 구현할 수 있도록 한다.

public class Person {
	new Person() // 기본 생성자
	new Person(6, "yoo") // 매개변수가 있는 생성자   
    	new Person(6, "yoo", "010-1234-1234")
    ...
}

// 점층적 생성자 패턴

 (전) 어떤 매개변수를 넘기는지 알기 어렵고, 복잡해보인다.

public class Person {
	Person person = new PersonBuiler.name('Yoo')
                        .age(20)
                        .number('010-1234-5678')
                        .build()
    ...
}

(후) 명시적으로 작성해서 가독성이 좋아졌다.
 
 
 

🧐 java 라이브러리 사용

이클립스에서 레포지토리 내용을 풀 받으면 자바 파일이 계속 실행 되지않는 문제가 있었다. 이때 제대로된 라이브러리 버전을 읽지 못하는 문제가 있었는데 Java Build Path를 계속 들어가서 Add Library에서 계속 버전이 맞는 라이브러리를 추가해주어야했다. 좀 더 이해가 필요한 부분이다.

  

 

Java가 파일을 읽도록 하는 법

Maven Repository에서 필요한 모듈을 가져와서 써야하는 경우가 생겼다. 자바에서는 프로젝트에 어떻게 넣어줘야할까 Build Path 자바 프로젝트를 빌드하는데 필요한 모든 리소스 파일들이 모여있는

jieum.tistory.com

 

🧐 SQL 실습

프로그래머스에서 SQL 풀때마다 원하는 대로 데이터를 확인해 볼 수 없어서 굉장히 답답했는데 이제는 배웠으니까
내가 데이터베이스 생성해서 테이블에 데이터 넣고 빼고 하면서 실습해 볼 수 있을 것 같다. 프레임워크 쓰면서 빨리 DB연결하고 싶다. 다음주 SQL 과정이 끝나면 스프링에서 연동하는 것도 배우게 될텐데 일하면서 마우스로만 딸각거렸던 작업을 직접 구현해보면 얼마나 재밌을까 기대중이다.
 
터미널에서도 직접 할 수 있고, MYSQL 워크벤치를 이용할 수도 있다.

mysql -uroot -p

show DATABASES;

CREATE DATABASE testDB;

use testDB;

CREATE TABLE person(
	id INT,
    nicname VARCHAR(20)
);

INSERT INTO person (id, nicname) VALUES (1, "Jone");


 


🍽️ 주간식사

뭘 먹어도 잘 먹지만, 친구들 따라다니면서 더 맛있는 점심을 먹고 있다.
이번주 상암에서 맛있게 먹었던 식사 기록

 
온돈부리 부타동. 상암 푸르지오시티 2층 있고 가격은 11000원
사케동집이라고 해서 갔는데 다른 메뉴를 시켜보았다.
일반적인 부타동이랑 고기 모양이 다르길래 궁금했다.
먹어보니 약간 매콤해서 더 맛있었다.


 
선향정 1인 샤브샤브 맑은탕. 누리꿈스퀘어 지하1층에 있는 1인 샤브샤브집
인당 12000원에 칼국수 볶음밥까지 먹을 수 있다. 다들 만족했던 곳.
 
 
 

📍이번주 회고와 다음주 계획

이번주 감기몸살 이슈로 잠을 많이 자고 휴식기를 가졌다. 비타민을 종류별로 따로 먹는게 문제 같아서 보완하고자 종합 비타민으로 바꿨다. 그래서 공부를 많이 하지는 못했다. 다음주 목표는 수업 잘 따라가면서 추가 학습 잘하고, 코테 1일1잔디 실천하기. 경험정리 끝내기)

 

네트워크의 전반적인 기술 내용을 개념별로 나누어 그림과 함께 표현한 책

 

부끄럽게도 얼마전까지 네트워크에 대해서는 HTTP와 HTTPS의 차이정도 밖에 몰랐었다.

정처기 공부를 하면서 네트워크 공부를 하게되고, 또 더 궁금해져서 인프런에서 강의도 듣고 하다보니

이해도 되고, 이제 조금 네트워크에 대해서 아는 것 같은 느낌이 든다. 

그런 의미에서 이 책으로 개념 정리가 한 번 더 되는 느낌이었다.

 

이 책은 큰 챕터 하위 소주제를 개념별로 쪼개어서 목차가 구성되어있다. 

장점은 하나의 개념만 다루는 방식이기 때문에 각 개념별로 잘 설명이 되어있다. 

 

스위치를 예로들면, 스위치에 대해 말로 대답할 수 있을 정도로 간결하면서 그림과 같이 설명해준다. 

 

한번쯤 정리해놓고, 꺼내보면 좋을 네트워크 지식이고

인터넷, 클라우드, 무선통신, 보안에 대해서도 다루고 있어서

개발자라면 당연히 알고 있으면 좋을 내용인 것 같다.

'📓Book' 카테고리의 다른 글

Book | 프로그래머의 뇌 - PART1. 코드를 더 잘 읽기  (0) 2022.07.03
Book | 미라클모닝  (0) 2021.10.30

하나의 파일은 하나의 모듈임

이 모듈을 export해서 써야하므로 export를 해주는데

 

export만 하면 해당 모듈안에 복수의 개체가 있을 때

여러개를 export 할 수 있는 경우에만 export 사용

 

해당 모듈의 전체를 export 할때

export default를 사용한다.

'🧐Programming' 카테고리의 다른 글

Servlet  (0) 2024.01.19
Java가 파일을 읽도록 하는 법  (0) 2024.01.14
Logging | SLF4J  (0) 2024.01.14
OCP  (0) 2022.02.21
Recoil | Selector  (0) 2021.12.01

+ Recent posts