java 43

Java <지속적으로 업데이트 중>

Java 스레드 (Thread) 스레드는 하나의 작업 단위 , 하나의 프로세스 안에 여러 개의 스레드가 동시에 작업을 수행하는 것은 멀티스레딩이라고 한다 JDBC 자바에서 DB 에 접속하기 위해 사용되는 API 객체지향 객체 지향 프로그래밍은 컴퓨터 프로그래 민 패러다임 중 하나로 , 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 Error & Exception Error 는 컴파일 시 문법적인 오류와 런타임 시 널 포인트 참조와 같은 오류로 프로세스에 심각한 문제를 야기시켜 프로세스를 종료시킬 수 있습니다. Exception 은 컴퓨터 시스템의 동작 도중 예기치 않았던 이상 상태가 발생하여 수행 중인 ..

2022.03.29 수업일지

오늘도 로직을 만드는 것보다 설계의 중요성을 강조하셨습니다 확실히 설계단계에서 꼼꼼하게 설계를 하니 코드를 작성할 때 편안하게 작성했던 것 같습니다 오늘 강의때 나온 개념들과 todo를 만든 설계에 대해 정리해보려 합니다 MVC 모델 2를 MVC 방식이라고도 부름 MVC는 Model, View, Controller의 약자입니다. 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세 가지의 역할로 구분한 패턴입니다. Query String 사용자가 입력 데이터를 전달하는 방법 중의 하나로, url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것을 말한다. “ [http://host:port/path? querystring](http://host:port/path? querystring) “ ..

2022.03.28 Servlet 그리고 모델 1 , 모델 2

Servlet의 정의와 목적 서블릿이란 Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술입니다 클라이 언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 동적 작동 : 실시간으로 매번 다른 데이터를 만들어낸다 → 브라우저에게 전송 서블릿 → java 안에 html 코드를 넣는 것 jsp →html 안에 java코드를 넣는 것 에러 500대 에러는 서버의 에러 400대 에러는 원하는 걸 찾을 수 없을 때 나는 에러 서블릿 로딩하는 시점은 지정할 수 있다 ⭐서블릿은 싱글 인스턴스 -멀티스레드가 지나가는 구조 -서버의 리소스를 절약하기 위해 게으른 로딩 lazy loading 서블릿의 특징은 처음부터 로딩하는 것이 아닌 필요한 순간까지 작업을 미룬다 (게으른 로딩..

2022.03.27 주말 공부 <크롤링 , Lombok 오류>

03.25일 금요일... 주말을 앞두고 있어서인지 강의가 끝나고 나서 공부가 손에 잘 잡히지 않아 복습을 못했습니다 그래서 주말에 다시 금요일에 강의했던 내용을 생각해보며 수업을 정리해보려고 합니다 Lombok는 만능이 아니다 LomBok는 편리한 기술이지만 만능은 아니다 최근 멀티 채팅관련한 코딩을 하던 중 그런 문제점에 직면했는데 그건 바로 @Cleanup 이 었다 정산적으로 객체지향으로 코드를 작성했을때는 효율적이지만 익명 클래스 , 람다식 , Thread를 이용하게 된다면 조심해서 사용해야 한다 지난 멀티 채팅 코드 중 LomBok의 문제점 돌아보기 public class MinimalServer2 { //bad code public static void main(String[] args) thr..

Group Study 03/24

Group Study 03/24 시간 : 18:40~21:00 참가자 : 김도윤, 최교득, 이동헌 Task : 쓰레드 DeadRock(데드락) 쓰레드의 종류 레이스 컨디션이란? 동기화 3/24일자 코드 복습 23일자 피드백 정리 활동내역 1. Multi Chating 구조에 대한 이해 쓰레드세이프란 멀티쓰레드 환경에서 안전하다라는 의미입니다. 쓰레드세이프해야하는 자료구조 예시는 CRUD를 생각해보자. 예를 들어 우리가 CRUD같은 작업을 하는 동안 발생하는 트랜젝션들이 발생합니다. 멀티쓰레드 환경에서 안정적으로 동작해야해하기 때문에 다량의 트랜젝션들이 꼬이면 안됩니다. 여러 개의 쓰레드가 하나의 리소스를 건들게 되면 문제가 발생할 수 있다. 그래서 불변이라는 개념이 필요한겁니다. --> 동기화 (한 번에..

Group_Study 2022.03.25

2022.03.24 ⭐DB 그리고 객체지향의 문제점

DB가 죽는 이유 그리고 객체지향의 문제점에 대한 조금... 아니 어려운 이야기를 해주셨습니다 앞으로 진행될 강의와 우리가 고민해야 할 문제들도 포함된 중요한 이야기여서 정리해보겠습니다 DB가 죽는이유? DB는 기본적으로 여러 사람이 처리할 수 있게 만들어져 있다 그러다 보면 Close(); 를 해줘야 하는데 안 해줘도 처음에는 티가 안 나다가 점점 시스템이 느려지고 결국은 먹통이 된다 시스템이 먹통이 되는 여러 경우 중 하나가 Full GC이다 Full GC가 발생하는 순간, 자바 애플리케이션이 멈춘다. (Stop-the-world). 따라서 Full GC는 성능과 안정성에 아주 큰 영향을 미친다. 그래서 대부분의 경우에는 서버를 한대가 아닌 2대 이상을 보유한다 ⭐객체 하나에 Thread가 여러 개 ..

2022.03.24 수업일지

면접 팁 기능&개념 설명을 할 때 책 사전적 의미를 설명 후 내가 이 기능을 가지고 어떤 걸 만들었고 결과적으로 내가 생각하거나 느낀 점을 설명 하기!! Immutable Class는 변경이 불가능한 클래스이며, 가변적이지 않는 클래스입니다 Immutable Class는 레퍼런스 타입의 객체이기 때문에 heap영역에 생성 됩니다. 자바에서 이런 Immutable Class로 어떤 것들이 있을까요? 대표적으로 String, Boolean, Integer, Float, Long 등등이 있습니다. 이러한 Immutable Class들은 heap영역에서 변경 불가능한 것이지 재할당을 못하는 것은 아닙니다. 즉 String a = "aa"; 에서 a = "bb"로 재할당이 가능합니다. a가 참조하고 있는 heap..

Group Study 2022.03.23

Group Study 03/23 참가자 : 김도윤, 최교득, 이동헌 활동내역 1. 파일 전송 프로그램 확장 (FileSendServer.java) 목표 : thread 사용하여 소켓 연결 순서와 상관없이 파일을 전송받을 수 있게 코드를 변경해보자. 코드 에러 발생 : wile 문에 try~catch 를 적용해서 에러 해결 에러 발생 :에러 코드 에러 해결코드 더 생각해봐야할 내용 socket에 @cleanup을 사용 시 클라이언트에서 read가 되지 않는 상황이 발생⇒ 닫아줘야하는 것까진 알겠어? 근데 왜 이렇게 해야 하지? 어떻게 해야 하는 거 징? ⇒ 어노테이션의 기능을 사용하지 않고 일일이 close()를 하니까 에러 해결 변경내용 : 사용자가 동시에 서버를 접속하여 로드할 수 있도록 병렬식 구성으..

Group_Study 2022.03.24

2022.03.23 채팅 IO

3번 정도의 채팅 로직을 만들었고 이려 시행착오가 있었는데 오늘의 코드가 깔끔한 것 같아 정리 한번 해보려 합니다 이번 로직은 다중채팅은 아니고 소켓통신을 응용한 1:1 채팅입니다 Server import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class OneToOneServer { //bad code public static void main(String[] args) throws Exception { //서버 생성 ServerSocket serverSocket =new ServerS..

2022.03.23 IO를 활용한 파일 보내기

이번 주는 IO(입출력)에 대해서 진도를 나가고 있습니다 IO의 관련된 개념들을 배우고 코드를 작성하는 것을 반복하고 있습니다 익숙해지기 위해서 한 주제 로 3일이나 이어갔다는 건 그만큼 웹으로 가기 위해서는 IO의 개념이 잘 잡혀있어야 한다는 뜻으로 느껴지네요 IO의 관련된 개념들은 따로 정리하고 이번글에서는 코드 리뷰를 해보겠습니다 이번 코드는 Client 가 Server 에게 요청하면 Server이 가지고 있는 파일을 보내는 로직을 만들어보았습니다 Server import lombok.Cleanup; import java.io.DataOutputStream; import java.io.FileInputStream; import java.net.ServerSocket; import java.net.S..