최근에 학원에서 능력있는 4명과 스터디그룹을 만들었다.
스터디의 내용은 단순히 공부를 하는것은 효율적이지 않다는 이유로 공통과제를 만들어서
매주 서로 코드리뷰를 하는방향으로 진행하고 있다.
첫번째 과제는 단순히 CRUD를 만들어보는 것으로 시작하였다.
간단한 과정이지만 데이터의 수정은 꽤 어렵게 다가와서 다양한 공부가 되었다.
그리고 목표는 같지만 과정이 다르다는 것에서 상당히 재미있는 경험이었다.
두번째 과제로는 멀티채팅 프로그램으로 잡았다.
멀티채팅 프로그램은 최근 학원에서 배운 소켓,Thread 의 개념을 실전에 그대로 사용한 예제이다.
그럼 일단 소켓을 다루기 위한 초기세팅부터 말해보겠다.
채팅프로그램을 만들기 위해서는 윈도우설정에서 포트를 열어줘야 한다.
일단 윈도우의 "실행"을 실행하고 wf.msc 를 검색해서 들어간다.
그다음 인바운드 규칙- 새 규칙 - tcp, 7777(포트는 자유지만 default는 7777)이렇게 설정하여 포트를 개방해준다.
이렇게 하면 준비는 끝이다.
이클립스로 돌아와서 이제 코드를 만들어 준다.
ServerSocket ss = new ServerSocket(7777);
System.out.println("[Server] Listening...");
Socket so = ss.accept();
InetAddress inet = so.getInetAddress();
System.out.println("접속한 프로그램의 IP : " + inet);
Scanner sc = new Scanner(so.getInputStream());
String data = sc.nextLine();
System.out.println("전송받은 데이터 : " + data);
간단하게 보면 ServerSocket으로 받아올 포트를 지정한다.
그 다음 받아온 포트를 허용(accept)하고 InetAdress로 허용한 유저의 정보를 받아온다.
그것을 Scanner에 저장하고 그것을 data변수에 저장한다.
그리고 저장한 변수를 print하면 한줄뛰워서 받아온 text를 출력한다.
Client는
Socket so = new Socket("127.0.0.1", 7777);
OutputStream os = so.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
Scanner sc = new Scanner(System.in);
System.out.println("[Client] 연결되었습니다");
System.out.print("서버에 전송할 메시지 입력 " );
String text = sc.nextLine();
bw.write(text);
server로 보낼 소켓을 만들어준다.
ip와 포트를 소켓에 담아주고 그 정보를 OutPutStream으로 보내줄 준비를 한다.
그 다음 OutPutStream을 OutPutStreamWriter으로 텍스트? 로 보낼 준비를 하고
버퍼화를 하기 위해서 BufferedWritter에 담아준다.(버퍼는 그냥 파일을 조각으로 나눠서 보내는것 정도로 이해하고 있다.)
이렇게 버퍼화를 한 객체와 String text로 입력한 text를 함께 서버로 보낸다.
이 코드로는 한개의 text밖에 보내지 못하지만 반복문을 사용하면 여러개의 메시지를 보낼수 있을것이다.
여기서 여러번 소켓을 보낼수 있게 하는 코드의 예시를 본다면
class MySession implements Runnable {
private Scanner sc;
private Socket so;
public MySession(Socket so) throws IOException {
this.so = so;
sc = new Scanner(so.getInputStream());
}
일단 Runnable로 Thread를 사용가능하게 인터페이스를 상속받는다.
Scanner과 Socket을 만들고
Session을 만든다.
세션은 so.getInputStream() 클라이언트로부터 소켓정보를 받아와서 뛰운다는 뜻이다.
@Override
public void run() {
String msg = "";
while (true) {
msg = sc.nextLine();
if ("exit".equals(msg)) {
break;
}
System.out.println(msg);
}
sc.close();
try { so.close(); } catch(Exception e) {}
}
}
Thread함수인 run에 받아올 text인 msg변수를 만들고 Scanner를 입력할 수 있게 만들어준다.
그 다음은 exit를 누르면 반복을 멈추게 하는것이다.
ServerSocket ss = null;
PrintWriter pw = null;
Socket so = null;
Scanner sc = new Scanner(System.in);
String msg = null;
ss = new ServerSocket(7777);
System.out.println("접속 대기중...");
so = ss.accept();
pw = new PrintWriter(so.getOutputStream());
MySession session = new MySession(so);
Thread th = new Thread(session);
th.start();
PrintWriter 소켓, 스케너, 입력할 text변수를 만들고
접근할 포트정보인 ServerSocket이라는 객체를 소켓에 저장하고
위 코드와 같이 accept해준다.
그 다음 so(포트정보)를 OutputStream으로 Client와 터널을 만들어주고 정보를 PrintWriter로 text형식으로 보내주는 pw라는 객체를 만든다.
다음줄에서 위에서 말한 반복문으로 받을 메시지를 받복에서 출력하는데
while(true) {
System.out.println("보낼 메시지 입력 : ");
msg = sc.nextLine();
pw.println(msg);
pw.flush();
if("exit".equals(msg));{
break;
이렇게 만들어진 pw에 while안에있는 메시지정보를 담아서 보내준다.
client는 기본 셋팅은 메세지를 한개만 보낼 수 있는 코드와 같다.
중요한점은 왜 양쪽 다 OutPutStream을 쓰냐는 점이다.
이유로 생각이 드는 점은 양방향에서 ip정보화 포트정보를 보내줘야 양방향에서 접속을 받고 들어갈 수 있기 때문일것이다.
메세지를 보내는 부분은 server와 동일하기 때문에 생략하겠다.
마무리로 앞으로 2주동안의 스터디 그룹의 계획에 대해서 정리해 보려고한다.
이 팀의 최종목표는 6월달에 1개월간 하나의 프로젝트를 수행하는것을 목표로 연습을 해나가는 팀이다.
그렇기 때문에 수업시간에 배운 내용에 자신이 기능을 생각해서 적용시켜볼 필요가 있다.
이번에는 학원에서 배운 멀티챗 기능에 업그레이드 버전으로 다양한 기능을 넣어볼 계획이다.
공동기능으로 클라이언트가 서버에 접속을 할때 로그인 기능이 있어야 하고
접속시 서버에 접속유저의 정보가 저장되고 클라이언트가 요청 시 접속중인 유저의 정보를 불러올 수 있어야한다.
정말 어려운 과정이라는 것을 알고는 있지만 지금 이런 과정을 겪어놔야 나중에 학원최종 프로젝트를 할 때
나만의 개성있는 프로젝트를 제안하고 구현할 수 있을것이다.
드디어 코드를 볼때 서서히 흐름이 보이고 생각한 대로 써지기 시작한 것 같다.
앞으로 더욱 성장하기 위해서는 연습만이 살길이라고 생각한다. 앞으로의 AI시대에서 살아남기더 위해서는 단순히 코드만 치는 코더가 되는것이 아니라
기획도 같이 할수있는 코더를 최소한의 개발자라고 부를 수 있을것이다.
나의 개발자수명로써의 얼마나 될지는 모르겠지만 그때까지 AI사용/개발 지식, 다양한 기획을 통한 사업성등 나 자신이
개발자수명이 다 끝났을 때를 대비해서 뭐든지 시작하기 위해서 배움을 멈추지 않을것이다.
세상이 격변하는 가운대 비전공자가 살아남기란 쉽지않을 것이다. 그렇기 때문에 영리하게 나 자신이 도태될 그때까지
최대한의 준비를 하여 다음직업을 준비할 것이다.
'JAVA 공부' 카테고리의 다른 글
자바의 기초 - 예외처리, 파일 입출력(전화번호 관리 프로그램) (0) | 2023.04.05 |
---|---|
자바의 기초 - 쓰레드, 예외처리 (0) | 2023.04.03 |
자바의 기초 - 주단위 능력평가(회원관리 프로그램 CRUD) (0) | 2023.03.31 |
자바의 기초 - 상속,다형성 (0) | 2023.03.27 |
자바의 기초 - 학원 자유주제(tv의 기능구현) (0) | 2023.03.26 |
최근에 학원에서 능력있는 4명과 스터디그룹을 만들었다.
스터디의 내용은 단순히 공부를 하는것은 효율적이지 않다는 이유로 공통과제를 만들어서
매주 서로 코드리뷰를 하는방향으로 진행하고 있다.
첫번째 과제는 단순히 CRUD를 만들어보는 것으로 시작하였다.
간단한 과정이지만 데이터의 수정은 꽤 어렵게 다가와서 다양한 공부가 되었다.
그리고 목표는 같지만 과정이 다르다는 것에서 상당히 재미있는 경험이었다.
두번째 과제로는 멀티채팅 프로그램으로 잡았다.
멀티채팅 프로그램은 최근 학원에서 배운 소켓,Thread 의 개념을 실전에 그대로 사용한 예제이다.
그럼 일단 소켓을 다루기 위한 초기세팅부터 말해보겠다.
채팅프로그램을 만들기 위해서는 윈도우설정에서 포트를 열어줘야 한다.
일단 윈도우의 "실행"을 실행하고 wf.msc 를 검색해서 들어간다.
그다음 인바운드 규칙- 새 규칙 - tcp, 7777(포트는 자유지만 default는 7777)이렇게 설정하여 포트를 개방해준다.
이렇게 하면 준비는 끝이다.
이클립스로 돌아와서 이제 코드를 만들어 준다.
ServerSocket ss = new ServerSocket(7777);
System.out.println("[Server] Listening...");
Socket so = ss.accept();
InetAddress inet = so.getInetAddress();
System.out.println("접속한 프로그램의 IP : " + inet);
Scanner sc = new Scanner(so.getInputStream());
String data = sc.nextLine();
System.out.println("전송받은 데이터 : " + data);
간단하게 보면 ServerSocket으로 받아올 포트를 지정한다.
그 다음 받아온 포트를 허용(accept)하고 InetAdress로 허용한 유저의 정보를 받아온다.
그것을 Scanner에 저장하고 그것을 data변수에 저장한다.
그리고 저장한 변수를 print하면 한줄뛰워서 받아온 text를 출력한다.
Client는
Socket so = new Socket("127.0.0.1", 7777);
OutputStream os = so.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
Scanner sc = new Scanner(System.in);
System.out.println("[Client] 연결되었습니다");
System.out.print("서버에 전송할 메시지 입력 " );
String text = sc.nextLine();
bw.write(text);
server로 보낼 소켓을 만들어준다.
ip와 포트를 소켓에 담아주고 그 정보를 OutPutStream으로 보내줄 준비를 한다.
그 다음 OutPutStream을 OutPutStreamWriter으로 텍스트? 로 보낼 준비를 하고
버퍼화를 하기 위해서 BufferedWritter에 담아준다.(버퍼는 그냥 파일을 조각으로 나눠서 보내는것 정도로 이해하고 있다.)
이렇게 버퍼화를 한 객체와 String text로 입력한 text를 함께 서버로 보낸다.
이 코드로는 한개의 text밖에 보내지 못하지만 반복문을 사용하면 여러개의 메시지를 보낼수 있을것이다.
여기서 여러번 소켓을 보낼수 있게 하는 코드의 예시를 본다면
class MySession implements Runnable {
private Scanner sc;
private Socket so;
public MySession(Socket so) throws IOException {
this.so = so;
sc = new Scanner(so.getInputStream());
}
일단 Runnable로 Thread를 사용가능하게 인터페이스를 상속받는다.
Scanner과 Socket을 만들고
Session을 만든다.
세션은 so.getInputStream() 클라이언트로부터 소켓정보를 받아와서 뛰운다는 뜻이다.
@Override
public void run() {
String msg = "";
while (true) {
msg = sc.nextLine();
if ("exit".equals(msg)) {
break;
}
System.out.println(msg);
}
sc.close();
try { so.close(); } catch(Exception e) {}
}
}
Thread함수인 run에 받아올 text인 msg변수를 만들고 Scanner를 입력할 수 있게 만들어준다.
그 다음은 exit를 누르면 반복을 멈추게 하는것이다.
ServerSocket ss = null;
PrintWriter pw = null;
Socket so = null;
Scanner sc = new Scanner(System.in);
String msg = null;
ss = new ServerSocket(7777);
System.out.println("접속 대기중...");
so = ss.accept();
pw = new PrintWriter(so.getOutputStream());
MySession session = new MySession(so);
Thread th = new Thread(session);
th.start();
PrintWriter 소켓, 스케너, 입력할 text변수를 만들고
접근할 포트정보인 ServerSocket이라는 객체를 소켓에 저장하고
위 코드와 같이 accept해준다.
그 다음 so(포트정보)를 OutputStream으로 Client와 터널을 만들어주고 정보를 PrintWriter로 text형식으로 보내주는 pw라는 객체를 만든다.
다음줄에서 위에서 말한 반복문으로 받을 메시지를 받복에서 출력하는데
while(true) {
System.out.println("보낼 메시지 입력 : ");
msg = sc.nextLine();
pw.println(msg);
pw.flush();
if("exit".equals(msg));{
break;
이렇게 만들어진 pw에 while안에있는 메시지정보를 담아서 보내준다.
client는 기본 셋팅은 메세지를 한개만 보낼 수 있는 코드와 같다.
중요한점은 왜 양쪽 다 OutPutStream을 쓰냐는 점이다.
이유로 생각이 드는 점은 양방향에서 ip정보화 포트정보를 보내줘야 양방향에서 접속을 받고 들어갈 수 있기 때문일것이다.
메세지를 보내는 부분은 server와 동일하기 때문에 생략하겠다.
마무리로 앞으로 2주동안의 스터디 그룹의 계획에 대해서 정리해 보려고한다.
이 팀의 최종목표는 6월달에 1개월간 하나의 프로젝트를 수행하는것을 목표로 연습을 해나가는 팀이다.
그렇기 때문에 수업시간에 배운 내용에 자신이 기능을 생각해서 적용시켜볼 필요가 있다.
이번에는 학원에서 배운 멀티챗 기능에 업그레이드 버전으로 다양한 기능을 넣어볼 계획이다.
공동기능으로 클라이언트가 서버에 접속을 할때 로그인 기능이 있어야 하고
접속시 서버에 접속유저의 정보가 저장되고 클라이언트가 요청 시 접속중인 유저의 정보를 불러올 수 있어야한다.
정말 어려운 과정이라는 것을 알고는 있지만 지금 이런 과정을 겪어놔야 나중에 학원최종 프로젝트를 할 때
나만의 개성있는 프로젝트를 제안하고 구현할 수 있을것이다.
드디어 코드를 볼때 서서히 흐름이 보이고 생각한 대로 써지기 시작한 것 같다.
앞으로 더욱 성장하기 위해서는 연습만이 살길이라고 생각한다. 앞으로의 AI시대에서 살아남기더 위해서는 단순히 코드만 치는 코더가 되는것이 아니라
기획도 같이 할수있는 코더를 최소한의 개발자라고 부를 수 있을것이다.
나의 개발자수명로써의 얼마나 될지는 모르겠지만 그때까지 AI사용/개발 지식, 다양한 기획을 통한 사업성등 나 자신이
개발자수명이 다 끝났을 때를 대비해서 뭐든지 시작하기 위해서 배움을 멈추지 않을것이다.
세상이 격변하는 가운대 비전공자가 살아남기란 쉽지않을 것이다. 그렇기 때문에 영리하게 나 자신이 도태될 그때까지
최대한의 준비를 하여 다음직업을 준비할 것이다.
'JAVA 공부' 카테고리의 다른 글
자바의 기초 - 예외처리, 파일 입출력(전화번호 관리 프로그램) (0) | 2023.04.05 |
---|---|
자바의 기초 - 쓰레드, 예외처리 (0) | 2023.04.03 |
자바의 기초 - 주단위 능력평가(회원관리 프로그램 CRUD) (0) | 2023.03.31 |
자바의 기초 - 상속,다형성 (0) | 2023.03.27 |
자바의 기초 - 학원 자유주제(tv의 기능구현) (0) | 2023.03.26 |