아쿠의 개발 일지

한화 시스템 부트 캠프 5주 차 회고 본문

ETC/한화시스템

한화 시스템 부트 캠프 5주 차 회고

디아쿠 2024. 6. 1. 10:28

내 얘기인 줄 알았다.

강사님 이거 이상한 거 같은ㄷ 아 감 잡았다.

 

 

이번 5주 차는 배열 변수 만드는 방법, static,,, 결합도 응집도,,, 싱클톤,,, GET방식,,,Tomcat,,, 소켓 통신,,, 쓰레드,,, 그리고 네트워크 프로그래밍에 대해서 배웠다.!

 

배운 게 정말 많은데 이게 우다다 지나가서 그런가,,, 내 머릿속에 있는 건 제일 금요일에 배운 Tomcat과 소켓통신,,, 네트워크 프로그래밍 뿐이다! 이번 주말에 열심히 복습해서 내 거로 만들어야지! (하는 생각과 함께 이거 스고 밥 먹으러 갈 거다.)

 

처음 들었을 때 Java는 뭐 이렇게 하나하나 선언을 해 주고 들어가지? 복잡하네,,, 생각이 들었는데 지금은

Class 이름 (띄고) 변수 이름;

 

머리에 각인 된 것 같다... 모두가 아시겠지만, 저는 re 제로부터 시작하는 자바 생활이기 때문에

코딩이 아니라 자바였네,,, 고칠 생각은 없다.

// 변수 생성
Class이름 변수이름
변수 이름 = 저장할 것
Integer num01;
num01 = 123;

이런 식으로 변수를 만들어 주면 된다! 그러면 num01에는 123이 잘 저장되어 있겠지 ! 🥰

 

for문에 대해서도 배웠다 for문은 python 때도 했던 터라 그렇게 어렵진 않았다,..!

i가 ~부터 ~까지 ~씩 ~하면서 반복
반복할 코드
for ( 초기값, 조건, 증감식) {
반복할 코드
}
이 양식을 지켜서 쓴다면 뭐라도 할 수 있을 것이다..!
Ex)
for ( Integer i = 0; i < 10; i = i+3) {
System.out.println("for문");
}
이렇게 하면 i는 0부터 10 미만까지 +3하면서 반복하는 것이다...!

 

기초는 이 정도로 마무리 하고,,, 

static 메소드

에 대해서 간략하게 정리를 할 것이다.

static 메소드는 이제 간단하게 말 하자면 객체를 생성하지 않고 [클래스이름.메소드명]으로 호출이 가능한 것이다.

때문에 결합도를 높이고, 응집도를 낮추는 것이라 안 좋은 코드라고 볼 수 있다...

 

소켓 통신

소켓 통신은 클라이언트와 서버, 두 컴퓨터가 특정한 port를 통해 실시간으로 양방향 통신을 가능하게 하는 것이다 (라고 네이버가 말 해준다.)

 

더 친절하게 설명을 해 주자면 HTTP 통신은 클라이언트에서 서버로 요청을 보내고, 서버가 응답하는 방식으로 통신이 이루어진다. 그렇기에 단방향 통신이라고 볼 수 있는데,

HTTP 통신 kotlinworld 참고,,,

 

소켓 통신은 서버와 클라이언트, 양방향 연결이 이루어지는 통신으로 클라이언트도 서버로 요청을 보낼 수 있고 서버도 클라이언트로 요청을 보낼 수 있는 통신이다.

이게 소켓 통신

 

그래서 우리는,,,!(나는!) Thread를 사용하여 소켓 통신을 하는 방법에 대해서 배웠는데!

못난 수강생이 죄송해요! 

 

일단 기억을 다시 살려보면서 정리를 해 보자면!

  1. 서버 소켓과 클라이언트 소켓이 같은 포트에 연결한다.

server 포트
client 포트

2. 서버 소켓이 클라이언트의 연결을 받아들이고, 연결된 클라이언트의 소켓을 반환.

Socket clientSocket = serverSocket.accept();

 

3. 클라이언트 소켓에서 출력 스트림을 가져온다.

outputStream = clientSocket.getOutputStream();

 

4. 출력 스트림을 PrintStream으로 감싸서 출력할 수 있도록 한다. + 입력 스트림도 가져온다.

printStream =new PrintStream(outputStream);
inputStream = clientSocket.getInputStream();
reader =new InputStreamReader(inputStream,"UTF-8"); // 입력 스트림을 UTF-8 인코딩을 사용하도록 감싼다.

 

5. BufferedReader를 통해 더 효율적으로 데이터를 읽을 수 있게 한다.

br =new BufferedReader(reader);

 

이런 식으로 연결을 해 주고, while문을 통해 받은 데이터를 계속 출력하게 할 수도 있고, 한 줄만 출력하게 할 수도 있고,,, 뭐 그렇다. 

이거는 더 자세하게 적어서 블로그에 올려야지..!

 

각 클라이언트 연결을 처리하기 위해 스레드를 생성해서 사용하는 건데 여러 스레드는 동일한 주소 공간을 공유한다.

그렇기에 데이터 공유가 간편하고, 빠른 연결 처리가 가능할 것이다.

 

여기에서 더 나아가서, 라이브러리로 DB 프로그램, 서버 만드는 방법에 대해서도 했고

Tomcat을 이용하여, 라이브러리를 활용했다. 서블릿에 대해서도 배웠는데 이건 그냥 간략하게 말 하고 넘어가겠다(절대 귀찮아서 아님.) 🙄🙄

 

Servlet는 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이며...etc 생략.

쉽게 예를 들면 로그인을 시도할 때, 서버가 클라이언트에서 입력되는 Id, Pw를 확인하고 결과를 응답할 것이다. 이러한 역할을 수행하는 것이 Servlet이다.

 

Song's Dlog님의 자료,,, 엄청 보기 쉽다.

 

우리 강사님 그림... 난 이게 더 좋다!

 

동그라미는 인터넷 세상이라고 보면 된다.

이제 이를 활용하여 부하분산에 대해서 배웠는데 가상 서버 3대를 설정해서 Tomcat 두개 하나는 Haproxy 를 설정하였다.

Haproxy를 사용하여 tomcat https로 접속했다.

 

연결은 정말 잘 됐다. 리눅스 때 배운 것인데 뭐 아직까지 쓴다... 정리를 해 둬야 할 것 같다. 할 때 마다 난리다.

 

 

이제 그만 적고 싶어졌다. 다들 힘내요... 주말은 푹 쉽시다!

주중에 먹은 수제버거 JMT다... 궁금하면 얘기 해 주세요.

728x90