Java | spring/Java Basic33 Java 동시성 완벽 가이드: 멀티스레드 환경에서 안전한 코드 작성하기 Java로 서버 개발을 하다 보면 동시성 이슈를 한번쯤은 만나게 된다. 개발 후 테스트나 운영 환경에서 여러 사용자가 동시에 접근하는 상황에서 데이터가 꼬이거나, 예상치 못한 결과가 나오는 경험을 한 번쯤은 해봤을 것이다. 그렇다면 왜 자바에서 이런 동시성 이슈가 발생할까? 그 이유는 크게 세 가지로 정리할 수 있다.멀티스레드 환경서버는 여러 요청을 동시에 처리하기 위해 스레드를 병렬로 실행여러 스레드가 같은 객체나 자원에 접근할 경우, 읽기·쓰기 순서가 뒤섞이면서 데이터 충돌 발생 가능JMMCPU 캐시와 메인 메모리 간 불일치 때문에, 한 스레드에서 변경한 값이 다른 스레드에 즉시 반영되지 않을 수 있으며, 이로 인해 문제가 발생하고, 예상치 못한 결과를 만들 수 있음원자성 및 실행 순서 문제i++ 같.. 2025. 9. 1. Java 파일 업로드, 다운로드 처리(+파일 사이즈 제한 세팅 방법) 프로그램을 개발하다 보면 파일 업로드, 다운로드 처리하는 경우가 다수 있다. 간단하게 게시판을 만들더라도, 첨부파일을 올리거나 이미지를 올릴 수 있게 하는 기능을 기본적으로 구현한다. 웹 서비스에서 파일 업로드 게시판 서비스를 제공한다면, 게시글을 작성할 때 파일만 업로드하는게 아니라 글을 작성하고 파일도 함께 첨부하게 된다. 이런 경우 일반 데이터는 텍스트로 전달하고 첨부파일은 바이너리 데이터로 전송해야 한다.(파일 업로드 시 파일 데이터는 바이너리 데이터로 전송) HTTP로 데이터 전송 시 entype을 multipart/form-data 전송하면 각각의 항목이 Part로 구분해서 한번에 전달이 된다. Form 태그로 전송 시 아래와 같이 써야 한다. enctype="multipart/form-dat.. 2023. 12. 17. 알아도 어려운 트랜잭션 개념정리 트랜잭션은 백엔드 개발자라면 제대로 알고 있어야 하는 개념이다. 간단한 서비스만 개발한다면 덜 중요하게 느껴지기도 하겠지만 복잡한 서비스를 개발하고 운영을 하다보면 중요성을 느끼게 된다. 대용량 데이터 동기화 등을 처리하다 보면 트랙잭션을 어떻게 처리 하느냐에 따라 데이터의 정합성 등에 영향을 주게 된다. 단건이 아닌 여러건의 배치를 진행하다 보면 트랜잭션으로 인해 단건(나는 각 처리 단위별로 롤백되게 하고자 했었음)이 아닌 전체가 롤백되어 서비스 오픈 전 테스트를 하다 놀란적이 있기도 했다. 이 때 관련 설정을 보고 다양한 테스트를 하면서 내용을 배우기도 했다. 참고로 정보처리기사 등 자격증을 준비하다보면 필수적으로 알아야하는 문제로 나오는 개념이기도 하다. 문제를 풀다보면 가끔 헷갈려서 잘못된 답을 .. 2021. 6. 4. Optional 제대로 알기, 면접 대비! (+간단 실무 코드 예시) 프로그래밍을 하다보면 null 처리를 필수적으로 하게 된다. 기존에는 null 체크를 해서 Null이 아닌 경우 뒤의 로직으로 넘어가게 분기처리를 하는 형태로 작업을 하게 된다. 이러한 null을 처리하기 위해 자바 8 이후 부터는 옵셔널 Optional을 사용한다. 옵셔널을 상세하게는 아니여도 다른 사람의 코드를 보면서 이런식으로 쓴다고는 알고는 있지만, 남에게 설명할 정도는 아니라면 면접 대비를 한다 생각하고, 옵셔널에 대해 상세하게 알아보도록 하자. 신입 개발자가 optional을 제대로 쓰고 알고 있다면 괜찮아 보인다는 선임의 이야기가 있었다. (뭐 사람마다 다를 수 있지만) 나도 이 기회에 제대로 알아봐야지 참고로 Optional을 사용하기 위해서는 자바 버전 8 이상을 사용하고 있어야 한다. .. 2021. 6. 3. Mac java 여러 버전 설치 맥에 여러 프로젝트를 실행하다 보면 해당 프로젝트에 맞는 java를 설치해야 하는 경우가 있다. 그런 경우 아래와 같은 순서로 기존 설치된 자바 버전 이외에도 다른 버전을 설치 할 수 있다. 오늘은 brew를 이용해서 설치를 해보자. brew가 설치되어 있지 않다면 아래 명령어를 활용하여 설치하자. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" macOS용 패키지관리자 Homebrew가 궁금하다면 아래 링크에 들어가 봐도 좋다. https://brew.sh/index_ko 저장소 연결하는 명령어 brew tap adoptopenjdk/openjdk ~ master* ❯ brew t.. 2021. 5. 26. Java 네트워크 프로그래밍 : 용어, TCP/UDP 네트워크 프로그래밍 ==> 서로 멀리 떨어진 두대이상의 컴퓨터가 서로 데이터를 주고 받는 프로그래밍(원격지의) 자바는 네트워크 프로그래밍을 위하여 java.net 패키지에 관련 클래스를 제공한다. https://docs.oracle.com/javase/8/docs/api/java/net/package-summary.html java.net (Java Platform SE 8 ) Interface Summary Interface Description ContentHandlerFactory This interface defines a factory for content handlers. CookiePolicy CookiePolicy implementations decide which cookies shoul.. 2019. 5. 8. Java class file, 자바 파일 클래스 주요 메소드 파일인지 아닌지 판단하는 메소드 boolean isDirectory() Tests whether the file denoted by this abstract pathname is a directory. boolean isFile() Tests whether the file denoted by this abstract pathname is a normal file. package com.file.exam01; import java.io.File; public class FileTest01 { public static void main(String[] args) { // TODO Auto-generated method stub //File f = new File("c:/my/hello.txt"); File .. 2019. 5. 8. Java Stream, 파일 입출력의 기본 스트림 Stream 순서가 있는 자료의 흐름을 stream이라고 한다. 파일로 데이터를 출력하려면 이 데이터들이 순서를 가지고 내보내 져야 한다. 또, 파일로 부터 데이터를 읽어 오려면 역시 파일의 내용이 순서대로 읽어 와 져야 한다. 이와 같이 순서 있는 자료의 흐름을 stream이라고 한다. 자바는 순서 있는 자료의 흐름을 위하여 stream을 제공한다. 크게 두가지 형태의 stream을 제공한다. 문자단위의 stream 글자 단위로 입출력이 이루어 진다. 이것은 메모장 같은 곳에서 바로 확인 할 수 있다. 문자단위의 입출력을 위해 자바가 제공하는 클래스 Reader : 문자 단위 읽기 위한 최상위 클래스 writer : 쓰기 위한 최상위 클래스 byte 단위의 stream InputStream : .. 2019. 5. 8. Java 파일처리 기본 : 입출력, 스트림 프로그램 실행한 결과를 화면에 출력하는 것은 "휘발성"으로 저장되지 않는다. 만약 실행한 결과를 영구적으로 보관하고자 한다면 "파일"이나 "데이터베이스"에 저장할 수 있다. 또, 프로그램 실행에 필요한 자료를 키보드로 입력 받는 것은 처리 자료가 많다면 번거롭다. 이때, 파일로부터 자료를 읽어 들여 처리 할 수 있다. 자바 입출력 자바는 파일처리를 위하여 java.io 패키지에 관련 클래스들을 제공합니다. 파일로 데이터를 입력, 출력 할 수 있다. 이것을 입출력이라고 한다. 때에 따라 파일이 아니라 네트워크로 원격직에 있는 다른 컴퓨터에게 데이터를 출력하고 입력할 수도 있다. 이와 같이 데이터를 파일이나 네트워크를 통해 입력, 출력 하는 것을 모두 "입출력"이라고 한다. 스트림 stream 자바는 이러한.. 2019. 5. 8. 이전 1 2 3 4 다음 반응형