NewsFilter Chrome Extension — Privacy Policy

뉴스필터 크롬 확장 프로그램 — 개인정보 처리방침 시행일: 2025-08-10 1) 개요 본 확장 프로그램은 AI 기반 기사 품질 평가 기능을 제공합니다. 데이터 최소 수집 원칙을 준수합니다. 2) 수집 항목 익명 토큰: 기기 간 동기화를 위해 chrome.storage.sync에 저장되는 무작위 토큰 URL 해시: 현재 페이지 URL의 SHA‑256 해시값(원본 URL은 서버로 전송하지 않음) 사용자가 자발적으로 제출한 피드백: 점수, 태그, 선택 코멘트 다음 정보는 수집하지 않습니다: 개인식별정보, 정확한 위치, 방문기록 목록, 키 입력/마우스 추적, 페이지 콘텐츠. ...

August 10, 2025

Asynchronous Programming - Summary

I will elaborate further through Java API and technical blog introductions in the future. Asynchronous What is Asynchronous? Processing tasks not in sequential order. When is it used? Used for performance improvement. When there are I/O operations When there are CPU bounded jobs (batch jobs) Considerations when writing asynchronous programs How to use the results of asynchronous tasks? callback Pass a function (routine) to perform additional work upon completion. blocking Wait until all are completed using buffer Able to use data even if I/O is not finished What state are the asynchronous tasks in? Responding according to state If all are completed -> process If in progress -> wait or proceed to the next process If an error occurred -> fail the entire process, etc. How to handle asynchronous I/O tasks? non-blocking (event loop method) blocking (request I/O to Thread in the usual way) When splitting multiple jobs, how to handle completion or failure If all are completed, success How to determine if all succeeded? If even one fails, all fail (fail fast) How to determine if one failed? If even one is completed, treat as success How to determine? Process in the order of completion Concurrency Since the purpose of asynchronous tasks is performance improvement, multiple threads may be used. In this case, concurrency issues must be resolved when accessing the same resource. volatile Ensures that the value referenced is from main memory, not cached in the CPU register (to resolve shared resource inconsistency issues) CompareAndSwap Ensures atomicity of operations at the CPU level for Check Then Act. Only one thread can perform the operation. Changes the value of a variable only if it contains the expected value. Used instead of the synchronization keyword (lock). If a thread is blocked, it cannot immediately wake up from the blocked state. ForkJoinPool Work-stealing technique. Threads can steal jobs assigned to other threads. Tasks cannot be perfectly evenly distributed among threads. Therefore, idle threads can take tasks from busy threads. Asynchronous processing at the system level? Use a message queue The producer sends a message about the work to the queue, and the consumer reads the message and processes the work Message queues are also used to decouple dependencies in event-driven design Transaction unit Group up to message publishing as a single transaction. Whether the asynchronous task is completed is not of concern. You can think of the message as a task. If the consumer fails to process due to an error, re-publishing is necessary.

August 29, 2022

Logging AOP Implementation - 1

Introduction Logging is not code for handling business logic, but rather for monitoring. That’s why logging appearing in the middle of business logic is very uncomfortable to see. Spring provides AOP, but I wanted to try implementing it myself without looking at Spring’s implementation. So, this time, I want to think about how to implement a great logging AOP. Situation Let’s write a sayHello method in the Person class and call it from main. Here, let’s assume the person object is provided by a framework. ...

September 19, 2021

Java - Exception Handling (Code)

Parent Topic Exception handling journey Situation Here is some smelly code I used incorrectly. Situation A function receives an order number and returns the corresponding order sheet. If the requested order number does not exist, an error should be raised and the client should be notified that the order does not exist. Code Controller 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package com.company.exceptiontest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Controller { private final Service service; private final Logger logger = LoggerFactory.getLogger(this.getClass()); public Controller(Service service) { this.service = service; } public String orderInfo(Long id) { try { OrderSheet orderSheet = service.searchOrderSheet(id); return String.valueOf(orderSheet); } catch (CustomException e) { logger.info("controller - orderInfo method: Error occurred while requesting order sheet info!"); e.printStackTrace(); return e.getMessage(); } } } In the controller, the order sheet information is returned as a string. If an error occurs, it is caught, logged, and the error message is returned to the user. ...

August 8, 2021

Exception handling - Java Exception Handling (Theory)

Parent Topic Exception handling journey References clean code effective java oracle java docs This time, let’s talk about what an exception is and how to handle exceptions. What is an exception? Let’s see how Oracle defines it: An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the program’s instructions. It means an event that disrupts the normal flow during program execution. ...

August 8, 2021

Exception handling journey - Redirection

Parent Topic Exception handling journey References https://opentutorials.org/course/2598/14199 https://en.wikipedia.org/wiki/Standard_streams https://en.wikipedia.org/wiki/Redirection_(computing) Definition Redirection is a form of interprocess communication (IPC). It is a function that most command line interpreters have. This is the method that came up when I wondered how data entered in the console is delivered to the app. Cat Actually, the definition and explanation are so well explained by Life Coding, so I’ll just link to it. https://opentutorials.org/course/2598/14199 Java What I want to test is how Java handles input and output. I want to know when stdin, stdout, and stderr are used. ...

July 3, 2021

From Keyboard Input to Console Output

Parent Topic Exception handling journey Situation - Simple Input/Output Program The app receives input from the keyboard. The app prints the input value to the console. This app is run from the console. Additionally, to analyze the process in detail, the program also prints the pid. Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class App { public static void main(String[] args) { printPid(); Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { System.out.println(scanner.next()); } } private static void printPid() { long pid = ProcessHandle.current().pid(); System.out.println("current pid: " + pid); } } Execution After compiling the code above in the console, run it in iterm. ...

July 3, 2021

Exception handling journey

First Step An exception can be seen as an abnormal situation. Excerpt from Oracle docs An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the program’s instructions. Therefore, developers should provide exception messages so that they can understand the situation when an exception occurs. Also, a client who calls the API should be given a different message from the developer. ...

July 3, 2021

Implementing a Data Table

Let’s Make a Data Table In the field, not only do I develop servers, but I also occasionally work on admin pages. Even if you don’t know much about the front end, you can develop them using jQuery. However, there was a need to improve performance… Let me share the process of improving it. Final result: https://jsfiddle.net/who3fa7t/2/ Problem I had to display about 5000 rows * 13 columns on a single screen without paging. ...

June 1, 2021

About Abstraction Structure

Overview I was pondering about architecture and realized that my understanding of abstraction was somewhat vague. I couldn’t picture it clearly in my mind. Then, one day, I had to answer why service interfaces exist in Spring’s controller-service-model structure. Why should we use service interfaces in Spring? Or, why shouldn’t we? Hmm… Of course, you can write interfaces to give polymorphism so that the controller doesn’t depend on a specific service, but usually, this leads to a giant service class, and abstraction becomes meaningless for services with too many responsibilities. That left me feeling uneasy. ...

March 7, 2021