Backend

· Backend/Java
Cf. Concurrent Software란? 동시에 여러 작업을 할 수 있는 소프트웨어를 의미합니다. Ex) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있는 SW Ex) 녹화를 하면서 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있는 SW Java에서 제공하는 Concurrent Programming 멀티 프로세싱과 멀티 스레딩으로 나뉩니다. Multi-Processing(ProcessBuilder) Multi-Thread Java Multi-Thread Programming Thread 상속 또는 Runnable 구현(Runnable이 함수형 인터페이스로 변경되었기 때문에 Lambda로 작성 가능합니다.) public class App { public static void ..
· Backend/Java
Cf. 기존에 Java에서 시간과 관련해 제공하던 API Date, GregorianCalendar, SimpleDateFormat 등이 있습니다. Date는 mutable한 특성(인스턴스 내부의 값 변경 가능)때문에 thread-safe하지 못하다는 단점이 있습니다. - 동시성 문제를 명확히 해결하지 않으면 중간에 값이 변경될 가능성이 있습니다. 또한 Date가 time까지 다루는 등 클래스명과 실제 처리하는 데이터가 다른 경우가 있습니다. 이 뿐만 아니라 타입 안정성이 없어 버그가 발생할 여지가 많습니다. 예를 들어, GregorianCalender를 통해 Calendar 인스턴스를 만들 때 '월'은 0부터 시작하는 것을 감안하여 입력해야 합니다. 이러한 특성을 두고 타입안정성이 없다고 합니다. 위와..
· Backend/Java
Optional이란? Optional은 오직 하나의 값을 가지고 있을 수도 없을 수도 있는 컨테이너라고 할 수 있습니다. Java 8 이전에는 제대로 된 값을 리턴할 수 없을 때 할 수 있는 방법은 두 가지 밖에 없었습니다. 단순히 null을 반환하거나 Exception를 반환하는 것이 전부였습니다. 이 때 null을 반환하는 경우에는 이를 참조하는 코드에서 또 다시 그 값이 null일 수도 있음에 유의해야 한다는 점에서 좋은 코드가 아니며, 에러(Exception)을 발생시키는 방법은 Stack Track을 출력하는 데에 새로운 리소스가 쓰여야 하므로 이 또한 좋은 방법은 아닙니다. Java 8부터는 Optional을 사용해 참조하는 코드에게 명시적으로 빈 값일 수 있음을 알려주고, 빈 값의 경우에 대..
· Backend/Java
람다식 특징 메서드에 인자로 전달하거나 그 자체로 리턴할 수 있다. 이를 다른 말로는 "함수를 first class object로 사용할 수 있다."고 한다. 람다식 조건 순수 함수(Pure function)여야 한다. - 함수 밖의 값을 변경하지 못한다. 고차 함수(Higher-Order function)여야 한다. - 함수가 함수를 매개변수로 받을 수 있고 함수를 리턴할 수도 있다. 인터페이스 Function의 메서드들과 관련(`compose()`, `andThen()` 등) Cf.함수 안에서 함수 밖의 Final이 아닌 변수를 참조하여 값을 변경하는 경우에는 순수 함수라고 볼 수 없다. Java가 기본적으로 제공하는 함수형 인터페이스 🌂 Function 하나의 매개변수를 가진다. R apply(T ..
· Backend/Java
Integer 클래스의 parseInt로 정수의 기수 변환을 할 수 있다. 이 메서드는 하나의 매개변수의 인자만 전달하여 단순하게 String 형태의 정수를 int 타입으로 변환할 때 많이 사용하게 되는데, 매개변수가 하나일 때는 변환된 10진수 정수가 나오고, 두 번째 매개변수로 기수를 전달할 경우 해당 String형태의 값이 해당 기수로 표현된 값임을 전달해주게 된다. 반환되는 값은 항상 10진수 값이다.두 번째 매개변수인 radix(기수)의 인자로는 10, 2, 8, 16가 들어갈 수 있다. Integer.parseInt(String str, int redix); Integer.parseInt(str, 2); Integer.parseInt(str, 8); Integer.parseInt(str, 16);
· Backend/Java
Integer 타입의 리스트를 int 타입 배열로 변환할 때는 (int[]) 등의 형태로 변환할 수 없다. 이 때는 아래와 같이 List에서 제공하는 stream을 통해 primitive type인 int 타입 배열로 변환할 수 있다. List list = Arrays.asList(1, 2, 3, 4, 5); int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
· Backend/Java
쉘 스크립트를 실행시키면서 파라미터를 넘기기 위해서는 'sh 스크립트명 파라미터'와 같이 실행시킬 쉘 스크립트 파일명 뒤에 띄우고 전달할 수 있다. 이를 자바에서 쉘 스크립트 실행하는 방법과 연동하면, Java가 제공하는 Runtime 클래스의 getRuntime() 메서드를 호출해 런타임 인스턴스를 반환받아, 여기에 exec() 메서드를 통해 쉘 실행 스크립트를 작성하면 된다. Process process = Runtime.getRuntime().exec("sh shellname.sh hello java"); 쉘을 아래와 같이 작성되어 있다고 전제한다. $ echo $1 $ echo $2 위의 내용을 바로 출력시켜 보려면 Process 인스턴스로부터 바로 InputStream을 받아 BuffredRea..
· Backend/Java
클라이언트에게서 데이터를 전달받아 서버에서 처리하기 위해서는 주로 json 형태의 데이터를 전달받고는 한다. 이 때 Jackson 패키지의 ObjectMapper를 사용해 받아온 문자열 형태의 json 데이터 또는 @RequestBody로 받아온 Map 타입의 데이터를 자용자 정의 타입으로 변환할 수 있다. 먼저, ObjectMapper를 사용할 때에는 ObjectMapper 객체를 생성하여 사용할 수 있다. ObjectMapper objectMapper = new ObjectMapper(); 1. json 문자열에서 특정 타입(Class)로 변환하는 경우 - readValue(String jsonStr, classType) T parsingData = objectMapper.readValue(jsonS..
1. 프로젝트 생성 SpringBoot 프로젝트를 생성한 후 src 폴더와 같은 위치에 react 환경을 구성할 별도의 폴더를 만들어 여기에 create-react-app을 통해 리액트 어플리케이션을 생성했다. 이 부분까지는 아주 간단한 작업이며, 잘 정리해둔 블로그가 많으니 생략하겠다. 2. CORS(cross-origin requests) 문제 해결하기 스프링부트 서버는 localhost:8080에서 실행되고, React 서버는 localhost:3000번에서 실행된다. 이 경우에는 CORS문제가 발생하게되므로 이를 해결 하기위해 Proxy를 별도로 설정해주어야 한다. cf. 기본 컨트롤러를 Rest Controller로 설정 백엔드 서버에서는 대부분의 경우에 데이터를 JSON 형태로 전달할 것이므로..
· Backend/Java
UDP 통신을 위해 필요한 Class ◆ DatagramSocket(접속 설정 필요없이 사용) ◆ DatagramPacket : 이를 통해 데이터를 주고 받음(데이터를 보낼 때는 ip, port 필요, 데이터를 받을 때는 buffer만 필요) 데이터 전송 시 BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in)); while ((buff = bufReader.readLine()) != null) { str += buff; } byte[] buffer = str.getBytes(); DatagramSocket ds = new DatagramSocket(); InetAddress ip = InetAddress.getByN..
devYH
'Backend' 카테고리의 글 목록 (2 Page)