분류 전체보기
-
[Java] 자바 직렬화에 대해서 (Serialization)Java 2024. 10. 23. 22:50
1. 직렬화란? (Serialization)직렬화란 자바의 객체를 바이트 스트림으로 변환하는 것을 말한다. 반대로 직렬화된 바이트 스트림을 다시 자바 객체로 변환하는 것은 역직렬화(Deserialization)라고 한다.바이트 스트림이란? (Byte Stream) - 데이터를 0과 1로 이루어진 이진 데이터(즉, 바이트 단위)로 처리하는 방식 - 컴퓨터에서 파일, 네트워크, 메모리 등에서 데이터를 읽고 쓰는 과정에서 사용되는 흐름 - 자바에서는 InputStream과 OutputStream 클래스를 통해 바이트 스트림을 처리함 주로 다음과 같은 상황에서 직렬화를 사용한다. - 객체를 파일에 저장하여 나중에 재사용하고 싶을 때 - 네트워크를 통해 객체를 전송할 때 - 분산 시스템에서 객체를 원격으로 주고 ..
-
[CS] CPU의 명령어 사이클과 인터럽트Computer Science 2024. 10. 18. 23:21
인터럽트 (Interrupt)CPU의 작업을 방해하는 신호, CPU의 정상적인 실행 흐름을 끊는 것(1) 동기 인터럽트 (예외)CPU가 실행하는 명령어와 직접적으로 관련된 상황 때문에 발생폴트: 예외 발생 후 예외가 발생한 명령어부터 실행어떤 명령어를 실행하기 위해 꼭 필요한 데이터가 보조기억장치에 저장되어 있는 경우트랩: 예외가 발생한 명령어의 다음 명령어부터 실행디버깅의 브레이크 포인트중단: CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류소프트웨어 인터럽트: 시스템 콜이 발생했을 때 나타나는 예외(2) 비동기 인터럽트 (하드웨어 인터럽트)명령어 실행과 관계없이 발생하는 외부 상황에 의해 발생주로 하드웨어 장치에서 오는 신호에 의해 CPU가 실행하던 작업을 중단하고 처리하는 형태..
-
[CS] CPU의 구성 요소Computer Science 2024. 10. 17. 22:42
CPU : 정보를 읽어 들이고 해석하며 동작을 실행하는 핵심 부품1. 구성 요소산술논리연산장치 (ALU, Arithmetic and Logic Unit)사칙 연산, 논리 연산과 같은 연산을 수행할 회로로 구성되어 있는 일종의 계산기CPU가 처리할 명령어를 실질적으로 연산하는 요소제어장치 (CU, Control Unit)명령어를 해석하여 ‘제어 신호’를 내보내는 장치제어 신호 : 부품을 작동시키기 위한 신호레지스터 (Register)CPU 내부에 있는 작은 임시 저장장치데이터와 명령어를 처리하는 과정의 중간값을 저장여러 개의 레지스터가 존재하며 각기 다른 이름과 역할을 가짐2. 레지스터(1) 프로그램 카운터명령어 포인터 (Instruction Pointer)다음에 실행할 명령어의 메모리 주소 저장(2) 명..
-
Netty TCP 서버 구축 실습Project 2024. 10. 9. 12:19
Netty란?비동기 이벤트 기반 네트워크 애플리케이션 프레임워크TCPServer.javapublic class TCPServer { // 클라이언트의 요청을 받을 포트 private final int port; public TCPServer(int port) { this.port = port; } public void start() throws InterruptedException { // 클라이언트의 연결 요청 처리 NioEventLoopGroup bossGroup = new NioEventLoopGroup(1); // 데이터 입출력 처리 NioEventLoopGroup workerGroup = new NioEve..
-
[Java] parseInt() 메서드 직접 구현하기Java 2024. 9. 4. 21:14
요즘 코딩 테스트 공부를 하고 있다. 코딩 테스트 문제를 풀다 보면 Integer 클래스의 parseInt() 메서드를 자주 사용하게 되는데, 문득 문제를 풀다가 parseInt() 메서드를 직접 구현해 보고 싶었다. 바로 시작하자. 메서드 시그니처객체 생성 없이 바로 호출 가능하도록 static 메서드로 정의문자열을 숫자로 변환할 수 없는 경우 예외를 던지도록 unchecked 예외 선언public static int parseInt(String str) throws NumberFormatException 메서드 구현!isBlank() 메서드는 isEmpty() 메서드를 포함하므로 isEmpty() 메서드는 생략 가능하다.첫 글자가 부호일 수도 있으므로 부호에 따라 적절히 처리한다.문자열을 순회하며 숫..
-
프로젝트에 JWT 인증/인가 적용하기Project 2024. 8. 30. 15:42
팀 프로젝트에서 JWT 인증/인가를 적용한 것을 팀원들과 공유하기 위해 작성한다. Spring Security와 JWT에 대해 조금이라도 알고 있어야 이해하는 데 편할 수 있다.구현 목표 (백엔드)JWT 이중 토큰 방식(Access / Refresh)을 사용하여 인증/인가를 구현한다.Access 토큰은 응답 헤더에, Refresh 토큰은 쿠키에 담아서 클라이언트에게 보낸다.Redis DB에 Refresh 토큰을 관리한다.Refresh 토큰 rotate 전략을 사용한다.로그아웃 기능을 통해 JWT 탈취를 최대한 방어한다.1. 환경설정build.gradle - 관련 의존성 추가// Spring Securityimplementation 'org.springframework.boot:spring-boot-sta..
-
[팀 프로젝트] LMS 웹 사이트 만들기 (Learn Hub)Project 2024. 8. 28. 21:30
https://github.com/jngsngjn/Learn-Hub GitHub - jngsngjn/Learn-Hub: LMS 웹 사이트입니다.LMS 웹 사이트입니다. Contribute to jngsngjn/Learn-Hub development by creating an account on GitHub.github.com개요네이버 클라우드 캠프에서 진행한 세 번째 프로젝트이자 나의 세 번째 프로젝트이다. 프론트엔드는 리액트, 백엔드는 스프링부트로 구성하여 웹 프로젝트를 진행했다. 6명의 팀원들과 함께 했으며 내가 팀장이 되어 팀을 이끌었다. 프로젝트는 약 6주 동안 진행되었다.주제"특정 IT 학원의 LMS 웹 사이트"교육기관에서 교육을 받으면서 "학생, 강사, 매니저에게 하나의 일관된 웹 서비스를 제..
-
[동시성 문제] 게시글 조회수 증가Spring Framework 2024. 8. 18. 01:06
팀 프로젝트 진행 중 팀원이 동시성 문제에 대해 언급했다. 조회수 증가 로직에서 동시성 문제가 발생될 수 있다고 했다. 동시성 문제에 대해 그동안 전혀 고민 없이 개발했는데, 팀원 덕분에 이번 기회에 동시성 문제를 인지하고 고민해 볼 수 있었다. 기존 조회수 증가 로직 (JPA의 변경 감지 기능을 통해 UPDATE 쿼리 실행)// StudentQuestionBoardServicepublic void incrementViewCount(Long questionBoardId) { QuestionBoard questionBoard = questionBoardRepository.findById(questionBoardId).orElseThrow(); questionBoard.setViewCount(qu..